Ответ клиента WCF всегда NULL с использованием ServiceModel Channel - PullRequest
0 голосов
/ 31 августа 2018

Я использую .NET Core 2.1 для интеграции с устаревшим веб-сервисом SOAP, который у нас есть.

код C #

[DataContract(Name = "registerResponse", Namespace = "urn:svcnet")]
public class RegisterResponse
{
    [DataMember(Name = "sessionKey")]
    public string SessionKey { get; set; }
}

[ServiceContract(Name = "svcnet", Namespace = "urn:svcnet")]
public interface IRegister
{
    [OperationContract(Name = "register")]
    RegisterResponse Register(string param1);
}

public class MyContext
{
    public void Register()
    {
        var serviceUrl = "https://myserviceurl";

        var endpoint = new EndpointAddress(new Uri(serviceUrl));

        var factory = new ChannelFactory<IRegister>(binding, endpoint);

        IRegister channel = factory.CreateChannel();

        var result = channel.Register("somevalue"); // <<< result is always null
    }
}

XML, возвращенный с сервера (перехвачен через Fiddler)

<?xml version="1.0" encoding="utf-16"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:svc="urn:svcnet">
  <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
  <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <svc:registerResponse>
      <sessionKey>ABC123</sessionKey>
    </svc:registerResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Результат всегда нулевой. Потратив много часов на Google и Stack Overflow, я убедил себя, что он молча не может создать объект ответа. Любые подсказки, как его отладить, или что-то явно не так с моим кодом?

Я также попробовал следующее, но тот же результат (всегда ноль)

[ServiceContract(Name = "svcnet", Namespace = "urn:svcnet")]
public interface IRegister
{
    [OperationContract(Name = "register")]
    [return: MessageParameter(Name = "sessionKey")]
    string Register(string param1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...