2011-05-20 71 views
2

我有以下的SOAP请求我从客户端,在那里基本上我要提取的名称,然后发回的“Hello测试”如何解析传入我的wcf服务操作的soap + xml消息?

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ns1="http://tempuri.org/"> 
<SOAP-ENV:Body> 
    <ns1:Customer> 
    <ns1:Name>Test</ns1:Name> 
    </ns1:Customer> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

如果我有一个一流的客户这样定义得到:

public class Customer 
{ 
    public string Name {get;set;} 
} 

我不确定如何将soap请求传递给我的wcf服务操作,该操作将采用由xsd生成的客户请求对象?

我的WCF服务的操作接收SOAP请求后,我不知道如何让Name属性了出来,并发送一个响应返回给客户端,如可能的“Hello测试”

注意:客户端不会发送一个Customer对象,它们将发送一个xml请求,并且我必须将它解析为一个Customer对象。我希望这可以清除事情。

我必须做这样的事情,我在的XDocument传递给我WCF服务操作:

private static void ParsSoapDocument(XDocument soapDocument) 
{ 
    //Parse XDocument for elements/attributes 

} 

回答

3

你不应该有任何分析,这是WCF为你处理。

根据您是否使用包装/解包消息,但基本情况,您描述的肥皂消息来自客户端,您的服务接口如下所示(假设您的响应是string) :

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    public string Customer(string Name); 
} 

更有可能的是,您实际上是在尝试执行一项接受客户的操作。例如,要检查如果客户存在,你可能有:

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    public bool CheckCustomerExists(Customer Customer); 
} 

,并在服务端你Customer类需要被定义为DataContract

[DataContract] 
public class Customer 
{ 
    public string Name{get;set;} 
} 

这将使SOAP请求看起来如下:

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> <SOAP-ENV:Body> 
    <ns1:CheckCustomerExists> 
    <ns1:Customer> 
    <ns1:Name>Test</ns1:Name> 
    </ns1:Customer> 
    </ns1:CheckCustomerExists> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 
+0

Ethan,谢谢你。我有客户向我发送请求,所以我不控制请求,我只是控制我收到请求时的操作,如将客户添加到数据库中。你知道我如何查看.net中的肥皂请求/响应(例如 - 使用Console.WriteLine(...)) – Xaisoft 2011-05-20 19:12:14

+1

-1:为什么使用'MessageContract'? – 2011-05-20 20:09:50

+0

@john我提到在两个地方使用'MessageContract',所以不完全确定你问的是哪一个。首先,我提到如果操作使用Customer对象而不是简单的数据类型,则需要使用'MessageContract'。我想你也可以使用'DataContract',但是我通常使用消息(到达第二个'MessageContract'引用)。其次,我建议使用请求/响应,如果操作可以控制消息的设计以及消息是否相当复杂。 – 2011-05-20 20:32:17