在客户端,WCF运营合同返回值为空!有解决办法吗?
我的WCF服务中有一个操作契约,它返回类的一个实例,该实例实际上是一个消息契约。(不是数据合同)。消息协定具有属性为>[MessageBodyMember]的属性在客户端,WCF运营合同返回值为空!有解决办法吗?,wcf,Wcf,我的WCF服务中有一个操作契约,它返回类的一个实例,该实例实际上是一个消息契约。(不是数据合同)。消息协定具有属性为>[MessageBodyMember]的属性 [MessageContract(WrapperName="AuthorizarionResponse", IsWrapped="true")] public class AuthorizationResponse { [MessageBodyMember] public string role {get;set;}; [Me
[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);
}
组织
类使用XmlSerializer。它不使用DataContract,因为我希望从现有ASMX客户端使用WCF服务。
当我调试服务并在Operation Contract方法中看到返回值时,我可以看到我希望通过此Operation Contract从服务返回的所有内容
但是在客户端,我得到了空值
一切都结束了,没有任何异常/错误。Fiddler2没有给出任何红色/错误标记!
会出现什么问题?问题是服务发送的回复soap消息的格式与客户端合同代码的格式不符。序列化程序根据客户端应用程序中的代理代码中定义的约定解析Soap消息,但是,如果收到的Soap消息不是预期的,序列化程序将自动跳过内容并向前移动。所以,并没有错误,并且对象也并没有被填充,因为序列化程序并没有找到预期的内容
所以,您需要确定客户端希望soap消息是如何形成的。您可以按照所述启用跟踪日志记录
然后使用
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\bin
中的SvcTraceViewer.exe
或其同级文件夹之一@Aliostad:对不起,我在发布问题时没有添加代码。希望这对现在的回答有帮助。你的回答很有帮助。谢谢你。我投票赞成你的答案!我是WCF的新手。您能告诉我一种简单的方法来识别客户端所期望的SOAP消息格式吗?通过查看WSDL或客户端代理类可以识别Soap消息吗?是的,通过查看代码可以识别客户端应用程序期望Soap消息的方式。然而,我遵循的最简单的方法是从WSDL创建服务存根(使用WSDL.exe/serverInterface)并从中创建服务。创建服务后,只需在IE中浏览服务并单击操作。它应该列出预期的请求和响应soap消息。HTH-AMITA将您的回答作为答案,并进一步编辑以提及解决方案。
<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>