HTML   发布时间:2022-04-14  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在WCF中,对于webHttpBinding,当服务器使用基本身份验证时,如何在客户端web.config中指定凭据?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个WCF RESTful服务 – “一般”服务是公开的,没有安全性;我打算使用基于SSL的基本身份验证的“admin”服务.这是我的服务器端web.config:
<system.serviceModel>
    <bindings>
        <webhttpBinding>
            <binding name="general" maxReceivedmessageSize="2147483647">
                <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
                <security mode="None">
                    <transport clientCredentialType="None" />
                </security>
            </binding>
            <binding name="admin" maxReceivedmessageSize="2147483647">
                <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
                <security mode="Transport">
                    <transport clientCredentialType="Basic" />
                </security>
            </binding>
        </webhttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="web">
                <webhttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <services>
        <service name="MyNamespace.Appservices.Generalservice">
            <endpoint address="" binding="webhttpBinding" contract="MyNamespace.Contracts.IGeneralservice" behaviorConfiguration="web" bindingConfiguration="general" />
        </service>
        <service name="MyNamespace.Appservices.Adminservice">
            <endpoint address="" binding="webhttpBinding" contract="MyNamespace.Contracts.IAdminservice" behaviorConfiguration="web" bindingConfiguration="admin" />
        </service>
    </services>
</system.serviceModel>

在客户端,我目前的代码如下:

private static IGeneralservice GetGeneralChAnnel()
{
    WebhttpBinding binding = new WebhttpBinding();
    binding.Security.Mode = WebhttpSecuritymode.None;
    binding.Security.Transport.ClientCredentialType = httpClientCredentialType.None;
    binding.MaxReceivedmessageSize = Int32.MaxValue;
    binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
    binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue;

    WebChAnnelFactory<IGeneralservice> cf = new WebChAnnelFactory<IGeneralservice>(binding,new Uri("http://localhost:1066/Generalservice"));
    IGeneralservice chAnnel = cf.CreateChAnnel();
    return chAnnel;
}

private static IAdminservice GetAdminChAnnel()
{
    WebhttpBinding binding = new WebhttpBinding();
    binding.Security.Mode = WebhttpSecuritymode.Transport;
    binding.Security.Transport.ClientCredentialType = httpClientCredentialType.basic;
    binding.MaxReceivedmessageSize = Int32.MaxValue;
    binding.ReaderQuotas.MaxStringContentLength = Int32.MaxValue;
    binding.ReaderQuotas.MaxArrayLength = Int32.MaxValue;

    WebChAnnelFactory<IAdminservice> cf = new WebChAnnelFactory<IAdminservice>(binding,new Uri("http://localhost:1066/Adminservice"));
    cf.Credentials.username.UserName = "myUserName";
    cf.Credentials.username.password = "mypassword";

    IAdminservice chAnnel = cf.CreateChAnnel();
    return chAnnel;
}

问题是,由于我显然不想硬编码所有这些配置信息,我需要如何在客户端的web.config中提供它?对于我来说,绑定元素在客户端上看起来和服务器上看起来完全相同,这是非常明显的.但是,在哪里可以指定分配给WebChAnnelFactory的凭据?

任何帮助和/或洞察将不胜感激.

谢谢,
史蒂夫

解决方法

您不能将这些凭据(用户名和密码)放在web.config中,并且WCF从那里读取它们.这是WCF中无法在配置中执行的功能之一 – 您必须在代码中设置这些凭据.

当然,在您的代码中,您可以从例如一个数据库表或一个配置条目,但你必须自己做. WCF无法配置为从某处自动读取这些设置.

大佬总结

以上是大佬教程为你收集整理的在WCF中,对于webHttpBinding,当服务器使用基本身份验证时,如何在客户端web.config中指定凭据?全部内容,希望文章能够帮你解决在WCF中,对于webHttpBinding,当服务器使用基本身份验证时,如何在客户端web.config中指定凭据?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。