我的WCF工作正常。我有以下配置:
<bindings>
<basicHttpBinding>
<binding name="HttpStreaming" maxReceivedMessageSize="65536000" closeTimeout="00:05:00" bypassProxyOnLocal="true" openTimeout="00:05:00" receiveTimeout="00:30:00" sendTimeout="00:30:00" transferMode="Streamed" messageEncoding="Mtom">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="CifsManager.CifsManagerServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="CifsManager.CifsManagerServiceBehavior" name="CifsManager.CifsManagerService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="HttpStreaming" contract="CifsManager.ICifsManagerService"></endpoint>
</service>
</services>
我为调用服务 ServiceClient 生成了代理类,我按以下方式调用它:
var service = new ServiceClient();
service.ClientCredentials.UserName.UserName = "111";
service.ClientCredentials.UserName.Password = "111";
service.bufferSize = int.Parse(ConfigurationManager.AppSettings["BufferSize"]);
var file= service.GetFile();
Here我发现文章描述了如何通过 wsHttpBinding 解决我的问题,但是使用它我得到了服务器错误。我可以使用 basicHttpBinding 创建身份验证,还是需要 wsHttpBinding ,我应该怎么做?
答案 0 :(得分:0)
我只是将所有这些都压缩成一个答案,所以这一切都在一个地方,更容易找到而不是在评论中展开。使用BasicHttpBinding
意味着您的凭据将通过网络以明文形式传递,这意味着它们可以在途中被截获而不会有太多麻烦。您可以使用WsHttpBinding
来避免此问题,Transport
允许您使用以下三种不同安全类型之一:Message
,TransportWithMessageCredential
或BasicHttpBinding
。您可以阅读有关这些here的信息。但请记住,对于其中任何一种,您都必须拥有一种或另一种形式的证书。
This问题简要讨论了其他一些WCF安全选项。如果您已经开始使用{{1}}并通过线路传递您的凭据,您至少可以考虑在这之前以某种方式屏蔽它们,也许是带有盐或类似物的sha1。如果您不想使用ASP.NET成员资格之类的任何内置和完成的解决方案,您必须自己弄清楚要传递哪种类型的身份验证令牌。