我需要在Xamarin Android和Xamarin iOS项目中使用SOAP 1.2 Web服务。每当我尝试向Web服务发送请求时,我都会得到例外:
System.Net.WebException:处理Web请求时出错:状态码415(UnsupportedMediaType):无法处理消息,因为内容类型为'text / xml; charset = utf-8'不是预期的类型'application / soap + xml;字符集= 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。
是否有人为此问题提供解决方案或解决方法?
非常感谢提前
答案 0 :(得分:0)
我有一段时间没遇到这个问题,只是意识到Xamarin许可证起了重要作用。
WSHttpBinding只会在“商业”版本中公开。如果您拥有“独立”许可证,那么您将只能使用BasicHttpBinding。
Indie许可证不支持WCF,因此您将拥有C#库的“水下”版本。
尝试使用Web API来托管您的服务,它适用于Xamarin。
答案 1 :(得分:0)
我的解决方法是使用:
BasicHttpBinding bind= new BasicHttpBinding(BasicHttpSecurityMode.Transport);
并在我的服务上公开使用此绑定的端点
e.g。在config add:
<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
答案 2 :(得分:0)
感谢您的建议和样品。
我的解决方案是将customBinding添加到配置文件并将消息编码更改为Soap 1.1:
<binding name="customHttpBinding">
<textMessageEncoding messageVersion="Soap11" />
<httpTransport/>
</binding>
祝你好运