WCF服务返回'null'

时间:2016-10-21 09:59:52

标签: c# web-services wcf soap

我目前正在开发一个小型WCF服务来进行一些电子邮件解析 (注意:WCF开发很新)。我不得不将它与一些已经使用ASMX Web服务执行类似操作的相当旧的VB.Net代码集成。我的测试服务目前非常简单,我只是想确保我的服务正在运行并且可以传回正确的信息。 (另一个注意事项:我的服务是用C#编写的,因为我对它比VB.Net更舒服)

public struct WrapperResults
    {
        public bool Success;
        public string ErrorMessage;
    }

    public class MQWrapper : IService1
    {
        public WrapperResults CallWrapper(string AppName, string Password, string ConfigXML)
        {
            WrapperResults results = new WrapperResults();

            results.ErrorMessage = "test";
            results.Success = true;

            return results;
        }
    }

现在,当调用此服务时,我可以进入此函数并看到'results.ErrorMessage'和'results.Success'设置正确,但是当服务将值返回给VB代码时,值只是'没有'和'错'。

所以我使用Fiddler检查来自ASMX服务(我知道有效)和新WCF服务的实际XML响应,似乎响应略有不同。

ASMX服务响应(工作)

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <CallWrapperResponse xmlns="http://tempuri.org/">
      <CallWrapperResult>
        <Success>true</Success>
        <ErrorMessage>test</ErrorMessage>
      </CallWrapperResult>
    </CallWrapperResponse>
  </soap:Body>
</soap:Envelope>

WCF服务响应(不工作)

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <CallWrapperResponse xmlns="http://tempuri.org/">
      <CallWrapperResult xmlns:a="http://schemas.datacontract.org/2004/07/TFXEmailProcessor" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:ErrorMessage>test</a:ErrorMessage>
        <a:Success>true</a:Success>
      </CallWrapperResult>
    </CallWrapperResponse>
  </s:Body>
</s:Envelope>

现在我不确定这些差异是否会对程序产生任何影响,但有没有办法让WCF服务以相同的ASMX服务XML格式进行响应?

1 个答案:

答案 0 :(得分:0)

没有足够的声誉来评论 - 除了[DataContract]属性之外,我认为您还需要在每个要序列化的属性上使用[DataMember]属性 - IIRC WCF有一个选择加入模型(而不是远程处理) ,有一个选择退出模型)。

查看https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractattribute(v=vs.110).aspx