当前位置: 首页 > 编程语言 > C#

在C#中以编程方式创建WCF客户端的标头(wsse)部分分享

时间:2023-04-10 16:30:33 C#

C#学习教程:以编程方式在C#中创建WCF客户端的头部(wsse)部分在app#config中,在app.config服务设置中创建以下部分:someusernamesomepassword我设法从c#生成绑定部分(上面未包含)和端点部分。我无法创建标题部分。我得到的错误是:(这是因为当我从c#生成所有内容时,我没有标头部分)此服务需要,它丢失了。标头部分很重要,就好像我将其从配置中排除并使用配置运行代码一样,它也会产生上述错误。我不想使用web.config/app.config。我必须从C#运行所有内容。(上面的app.config工作正常,但我想通过c#做同样的事情)注意:以下更新基于下面提供的解决方案请阅读下面解决方案的评论以便更好地理解更新1:(第一次使用BasicHttpBinding以编程方式)BasicHttpBinding绑定=newBasicHttpBinding();binding.Name="联系人";binding.CloseTimeout=TimeSpan.FromMinutes(1);binding.OpenTimeout=TimeSpan.FromMinutes(1);绑定.ReceiveTimeout=时间跨度。从分钟(10);binding.SendTimeout=TimeSpan.FromMinutes(1);绑定.AllowCookies=false;绑定.BypassProxyOnLocal=false;binding.HostNameComparisonMode=HostNameComparisonMode.StrongWildcard;绑定.MaxBufferSize=524288;MaxReceivedMessageSize=524288;binding.MessageEncoding=WSMessageEncoding.Text;binding.TextEncoding=System.Text.Encoding.UTF8;binding.TransferMode=TransferMode.Buffered;binding.UseDefaultWebProxy=true;binding.ReaderQuotas.MaxDepth=32;最大字符串内容长度=65536;binding.ReaderQuotas.MaxArrayLength=131072;绑定.Reader配额.MaxBytesPerRead=32768;binding.ReaderQuotas.MaxNameTableCharCount=131072;binding.Security.Mode=BasicHttpSecurityMode.Transport;binding.Security.Transport.ClientCredentialType=HttpClientCredentialType.None;binding.Security.Transport.ProxyCredentialType=HttpProxyCredentialType.None;binding.Security.Transport.Realm="";binding.Security.Message.ClientCredentialType=BasicHttpMessageCredentialType.UserName;binding.Security.Message.AlgorithmSuite=System.ServiceModel.Security.SecurityAlgorithmSuite.Default;CustomBindingcustomBinding=newCustomBinding(绑定);SecurityBindingElement元素=customBinding.Elements.Find();//删除安全时间戳,因为您的原始绑定未使用它//element.IncludeTimestamp=false;(在我的例子中,元素为NULL)EndpointAddressendpoint=newEndpointAddress("https://myserviceaddress");PostingWebServiceClientclient=newPostingWebServiceClient(customBinding,endpoint);client.ClientCredentials.UserName.UserName="我的用户名";client.ClientCredentials.UserName.Password="我的密码";client.getActiveChannels(newgetActiveChannels());直接使用自定义Bindgin:SecurityBindingElementsecurityElement=SecurityBindingElement.CreateUserNameOverTransportBindingElement();securityElement.IncludeTimestamp=false;TextMessageEncodingBindingElementencodingElement=newTextMessageEncodingBindingElement(MessageVersion.Soap11,Encoding.UTF8);HttpsTransportBindingElementtransportElement=newHttpsTransportBindingElement();CustomBindingcustomBinding=newCustomBinding(securityElement,encodingElement,transportElement);EndpointAddressendpoint=newEndpointAddress("https://myserviceaddress");PostingWebServiceClientclient=newPostingWebServiceClient(customBinding,endpoint);client.ClientCredentials.UserName.UserName="我的用户名";client.ClientCredentials.UserName.Password="我的密码";client.getActiveChannels(newgetActiveChannels());在这种情况下,您不必直接配置标头,因为您的方案应该直接由BasicHttpBinding或CustomBinding支持如果您需要从C#对其进行配置,则必须在您的代码中创建一个绑定:binding.Security.Message.ClientCredentialType=BasicHttpMess用户名;//其余的绑定配置都在这里//自定义绑定可以访问基本绑定的更多配置细节CustomBindingcustomBinding=newCustomBinding(binding);SecurityBindingElement元素=customBinding.Elements.Find();//删除安全时间戳,因为您的原始绑定元素未使用它。IncludeTimestamp=false;EndpointAddress地址=newEndpointAddress("https://...");ProxyWebServiceClientclient=newProxyWebServiceClient(customBinding,address);client.ClientCredentials.UserName.UserName="...";client.ClientCredentials.UserName.Password="...";另一种解决方案是直接构建自定义绑定,而不是从基础绑定开始:SecurityBindingElemetnsecurityElement=SecurityBindingElement.CreateUserNameOverTransportBindingElement();securityElement.IncludeTimestamp=false;TextMessageEncodingBindingElementencodingElement=newTextMessageEncodingBindingElement(MessageVersion.Soap11,Encoding.UTF8);HttpsTransportBindingElementtranportElement=newHttpsTransportBindingElement();//基本绑定的其他配置分为//编码和传输元素的属性CustomBindingcustomBinding=newCustomBinding(securityElement,encodingElement,transportElement);EndpointAddress地址=newEndpointAddress("https://...");ProxyWebServiceClientclient=newProxyWebServiceClient(customBinding,address);用户名.用户名="...";client.ClientCredentials.UserName.Password="...";请参阅此StackOverflow问题的已接受答案,它显示了如何以编程方式将客户端凭据添加到代理。它还显示了在客户端端点配置XML中添加标头,这是我以前从未见过的。以上就是C#学习教程:Programmaticallycreatetheheader(wsse)inC#分享全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: