使用WCF over HTTP连接到受密码保护的服务器
你好, 我需要使用WCF将我的ASP.NET MVC应用程序连接到网络上的服务器。服务器受用户名和密码保护,但它似乎不是https,而是简单的http 这是我目前掌握的代码:使用WCF over HTTP连接到受密码保护的服务器,wcf,web-services,http,credentials,Wcf,Web Services,Http,Credentials,你好, 我需要使用WCF将我的ASP.NET MVC应用程序连接到网络上的服务器。服务器受用户名和密码保护,但它似乎不是https,而是简单的http 这是我目前掌握的代码: public MyObject GetMyData(string id) { ChannelFactory<MyIService> factory; ClientCredentials loginCredentials = new ClientCredentials(); loginC
public MyObject GetMyData(string id)
{
ChannelFactory<MyIService> factory;
ClientCredentials loginCredentials = new ClientCredentials();
loginCredentials.UserName.UserName = "MyName";
loginCredentials.UserName.Password = "MyPassword";
factory = new ChannelFactory<ICFService>("MyData");
var defaultCredentials = factory.Endpoint.Behaviors.Find<ClientCredentials>();
factory.Endpoint.Behaviors.Remove(defaultCredentials); //remove default ones
factory.Endpoint.Behaviors.Add(loginCredentials); //add required ones
var proxy = factory.CreateChannel();
var response = proxy.GetMyData(id);
((IDisposable)proxy).Dispose();
return response as MyObject ;
}
Edit2:
这就是在firefox中浏览url时对话框的外观。我不知道如何检查Proxy.GetMyData将使用的帐户url
请注意,这是一个例子,地址和“网站说”是另外一回事
我希望使用的Url如下所示:
http://bat.myserver.com/ag/get?UID=12345.eu_vddsall_xml&MyId=WRH421&LANG=sv
Edit3:
通过将愚弄添加到web.config,我们向前迈出了一步(感谢Ladislav Mrnka):
现在我们得到了以下异常:
无法使用XmlSerializer反序列化根名称为“Binary”且根命名空间为“”的XML正文(对于操作“GetMyData”和协定('ICFService',“”))。确保将与XML对应的类型添加到服务的已知类型集合中。
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。
异常详细信息:System.Runtime.Serialization.SerializationException:无法使用XmlSerializer反序列化根名称为“Binary”且根命名空间为“”的XML正文(对于操作“GetMyData”和约定('ICFService',“”))。确保将与XML对应的类型添加到服务的已知类型集合中
首先,我认为远程服务器maby返回了一个xml文档,表明我使用了错误的IP,所以我将站点上载到了正确的服务器(使用正确的IP),但我在那里得到了相同的异常
编辑4
创建了一个新问题:
感谢Ladislav Mrnka的帮助 如果您不知道如何找到服务,您应该询问服务提供商服务是如何安全的 看起来您的站点正在使用基本HTTP身份验证。对于此类身份验证,您需要创建自定义
webHttpBinding
配置:
<system.serviceModel>
<client>
<endpoint address="http://MyUrl/"
binding="webHttpBinding"
bindingConfiguration="secured"
behaviorConfiguration="MyData"
contract="MyNameSpace.MyIService"
name="MyData"/>
</client>
<bindings>
<webHttpBinding>
<binding name="secured">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="MyData">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
@Tim>是的,我曾尝试在Explorer中浏览服务器的URL,在浏览时,会弹出一个对话框,将我在应用程序中声明的用户名和密码放在其中。完成后,我将收到一个xml文档,它告诉我“不允许使用IP”,但这是预期的(从本地计算机运行时)。您所说的用户名和密码保护是什么意思?这是基本Http身份验证还是一些自定义表单身份验证?@Ladislav Mrnka>请看我文章的Edit2。@SnowJim-这似乎是一个与原始问题无关的问题。我建议你接受拉迪斯拉夫的回答,并就新问题提出一个新问题。@SnowJim-要解决第二个问题,请看
http://bat.myserver.com/ag/get?UID=12345.eu_vddsall_xml&MyId=WRH421&LANG=sv
<bindings>
<webHttpBinding>
<binding name="secured">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
<system.serviceModel>
<client>
<endpoint address="http://MyUrl/"
binding="webHttpBinding"
bindingConfiguration="secured"
behaviorConfiguration="MyData"
contract="MyNameSpace.MyIService"
name="MyData"/>
</client>
<bindings>
<webHttpBinding>
<binding name="secured">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" />
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="MyData">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>