【问题标题】:Using SOAP 1.2 with Xamarin将 SOAP 1.2 与 Xamarin 一起使用
【发布时间】:2014-08-20 10:21:44
【问题描述】:

我需要在 Xamarin Android 和 Xamarin iOS 项目中使用 SOAP 1.2 Web 服务。每次当我尝试向 Web 服务发送请求时,都会出现异常:

System.Net.WebException:处理 Web 请求时出错:状态码 415(UnsupportedMediaType):无法处理消息,因为内容类型为 'text/xml; charset=utf-8' 不是预期的类型 'application/soap+xml; charset=utf-8'。

    BasicHttpsBinding binding = new BasicHttpsBinding
    {
            TextEncoding = System.Text.Encoding.UTF8,
            Name = "basicHttpBinding",
            MaxBufferSize = 2147483647,
            MaxReceivedMessageSize = 2147483647,
            MessageEncoding = WSMessageEncoding.Text
    };
    TimeSpan timeout = new TimeSpan(0, 0, 30);
    binding.SendTimeout = timeout;
    binding.OpenTimeout = timeout;
    binding.ReceiveTimeout = timeout;
    binding.Security.Mode = BasicHttpsSecurityMode.Transport;


    EndpointAddress endpointAdr = new EndpointAddress("https://my.WebService.Address.svc");

    Client client_mc = new Client(binding, endpointAdr);
    var data = client_mc.GetUserInfo("db","user","password", "language");

我了解到 Xamarin 不支持 SOAP 1.2 Web 服务。我尝试使用 CustomHttpsBinding 而不是 BasicHttPsBinding,但它似乎不起作用。 Xamarin 中没有 WSHttpBinding。

是否有人对此问题有解决方案或解决方法?

在此先感谢

【问题讨论】:

  • 您使用的是什么类型的 Xamarin 许可证?
  • 我正在使用 1 个月的免费试用版 - 这就是生意。

标签: android ios soap xamarin


【解决方案1】:

我在这方面遇到了一段时间的麻烦,只是意识到 Xamarin 许可证起着重要作用。

WSHttpBinding 只会在“Business”版本及更高版本中公开。如果您拥有“独立”许可证,那么您将只能使用 BasicHttpBinding。

独立许可证不支持 WCF,因此您将拥有 C# 库的“淡化”版本。

尝试使用 Web API 来托管您的服务,它适用于 Xamarin。

【讨论】:

    【解决方案2】:

    我的解决方案是使用:

    BasicHttpBinding bind= new BasicHttpBinding(BasicHttpSecurityMode.Transport);
    

    并在我的服务上公开一个使用此绑定的端点

    例如在配置中添加:

    <bindings>
    <basicHttpBinding>
        <binding name="BasicSecure">
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="name" behaviorConfiguration="">
      <endpoint address="mobile" binding="basicHttpBinding" bindingConfiguration="BasicSecure" contract="contract"/>
    </services
    

    【讨论】:

      【解决方案3】:

      感谢您的建议和样品。

      我的解决方案是在配置文件中添加 customBinding 并将消息编码更改为 Soap 1.1:

          <binding name="customHttpBinding">
            <textMessageEncoding messageVersion="Soap11" />
            <httpTransport/>
          </binding>
      

      最好的问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-15
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        • 2017-07-19
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多