我有一个基于ServiceStack的Soap客户端,它为HTTP正确操作,但是当我尝试使用HTTPS时,它会给我带来这个错误
ServiceStack.WebServiceException: The provided URI scheme 'https' is invalid; ex
pected 'http'.
Parameter name: via ---> System.ArgumentException: The provided URI scheme 'http
s' is invalid; expected 'http'.
Parameter name: via
at System.ServiceModel.Channels.HttpChannelFactory`1.ValidateCreateChannelPar
ameters(EndpointAddress remoteAddress, Uri via)
at System.ServiceModel.Channels.HttpChannelFactory`1.OnCreateChannelCore(Endp
ointAddress remoteAddress, Uri via)
at System.ServiceModel.Channels.ChannelFactoryBase`1.InternalCreateChannel(En
dpointAddress address, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.ServiceChannelFactoryOv
erRequest.CreateInnerChannelBinder(EndpointAddress to, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.CreateServiceChannel(En
dpointAddress address, Uri via)
at System.ServiceModel.Channels.ServiceChannelFactory.CreateChannel(Type chan
nelType, EndpointAddress address, Uri via)
at System.ServiceModel.ChannelFactory`1.CreateChannel(EndpointAddress address
, Uri via)
at System.ServiceModel.ClientBase`1.CreateChannel()
at System.ServiceModel.ClientBase`1.CreateChannelInternal()
at System.ServiceModel.ClientBase`1.get_Channel()
at ServiceStack.WcfServiceClient.Send(Message message)
at ServiceStack.WcfServiceClient.Send[T](Object request)
--- End of inner exception stack trace ---
at ServiceStack.WcfServiceClient.Send[T](Object request)
at ElectronicServiceInterface.ESIClient.Login()我使用的是自签名证书,但我可以使用curl成功地调用我的Soap服务。对我来说,这表明问题在客户端。
我的代码是这样的
using (var client = new Soap12ServiceClient(Uri))
{
var request = new MyRequestObject { Username = Username, Password = Password };
var response = client.Send<MyResponseObject>(request);
}上面的示例显示了请求/响应DTO类的用法。
如果不使用配置文件(只使用代码),我需要做什么才能使它与HTTPS一起工作呢?
发布于 2015-05-21 06:51:23
我相信您的问题是在您的配置文件,尝试添加到绑定标签。关于这个ServiceStack.IntegrationTests,你应该有
<bindings>
<basicHttpBinding>
<binding name="Endpoint_BasicHttpBinding" />
</basicHttpBinding>
<wsHttpBinding>
<binding name="Endpoint_WsHttpBinding">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>但是在这个测试中,它只被配置为在HTTP上工作,而不是HTTPS,所以您所要做的就是将<transport clientCredentialType="None" />更改为<transport clientCredentialType="transport" />
发布于 2015-05-26 15:48:47
您需要有两个单独的基址,一个用于HTTP,一个用于HTTPS。
您可以在配置文件中或在执行宿主的代码中定义它。
https://stackoverflow.com/questions/30276585
复制相似问题