从Data Contract创建soap消息

时间:2015-01-07 12:18:35

标签: xml wcf soap datacontractserializer

我有一个WCF服务,我使用c#来使用它。基本上我通过它添加服务引用并使用服务操作。

使用basicHttpBinding公开此服务。我也想允许soapBinding,并给我的客户提供一些肥皂样本。

是否可以从DataContract类获取soap xml?我的意思是,我想以某种方式,使用我现有的代码获取xml。

[DataContract]
public class Foo
{
    [DataMember]
    public int Id {get;set;}

    [DataMember]
    public string Name {get;set;}
}



[ServiceContract]
public interface IService
{
    [OperationContract]
    bool Import(IEnumerable<Foo> foos);
}

c#c​​lient:

var client = new ws.ServiceClient();

var foo = new Foo{
    Id = 1,
    Name = "Test"
};


client.Import(new[] { foo });

为了防止我不够清楚,我想让soap xml重用上面的代码。

1 个答案:

答案 0 :(得分:1)

如果您只是想要一个简单的文档请求,或者您可以使用WCF跟踪。

为您的所有服务提供简单而通用的解决方案。

在您的system.serviceModel

<system.serviceModel>
...
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" />
    </diagnostics>     
....
  </system.serviceModel>

并添加system.diagnostics元素

<system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="4"/>
  </switches>
   <sources>
      <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\temp\WCFLoging.svclog" />
    </sharedListeners>
  </system.diagnostics>

然后在服务调用检查服务日志(c:\ temp \ WCFLoging.svclog)之后会有一个明确的请求。

或者,如果您想在客户端代码中获取它。 使用WCF消息检查器。示例使用http://www.primaryobjects.com/CMS/Article121