我的WCF服务中有一个操作合同,它返回一个实际上是消息合同的类的实例。 (不是数据合同)。消息合约具有属性>的属性。 [MessageBodyMember]
[MessageContract(WrapperName="AuthorizarionResponse", IsWrapped="true")]
public class AuthorizationResponse
{
[MessageBodyMember] public string role {get;set;};
[MessageBodyMember] public Organization organization {get; set;};
}
[ServiceContract]
interface IAuthorization
{
[OperationContract]
public AuthoriztionResponse GetAuthorizationResult(AuthorizationRequestMessage request);
}
Organization
类使用XmlSerializer。它不使用DataContract,因为我希望从现有的ASMX客户端使用WCF服务。
当我调试服务并在Operation Contract方法中看到返回值时,我可以看到我希望通过此操作合同从服务返回的所有内容。
但在客户端,我得到空值!
一切都在没有任何异常/错误的情况下结束。 Fiddler2不会给出任何红色/错误标记! 怎么会出错?
答案 0 :(得分:3)
问题是服务发送的回复肥皂消息未按客户合同代码的预期形成。序列化程序根据客户端应用程序中代理代码中定义的Contract解析Soap消息,但是,如果收到的soap消息不符合预期,则序列化程序会静默跳过内容并继续前进。因此,没有错误,也没有填充对象,因为序列化程序没有找到预期的内容。
因此,您需要确定客户期望肥皂消息的形成方式。
答案 1 :(得分:1)
您可以按照here
所述启用跟踪日志记录<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\wcf.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
然后使用SvcTraceViewer.exe
或其中一个兄弟文件夹
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin