如何添加自定义HTTP头的C#Web服务客户端耗时轴心国1.4 Web服务

我想用C#该web服务的Java轴1.4 Web服务客户端。 Axis服务要求授权:在HTTP 信息的基本Base64EncodedToken标头值。 我无法找到一个方法来设置在Visual studio.net使用Web服务的非标准方式这个头,像正常的WSDL产生refernce也不符合WSE3.0

我不能使用WCF的项目使用.NET 2.0开发。

有没有办法做到这一点?

--------------解决方案-------------

这似乎原作者已经找到了自己的解决方案,但对于其他人谁送过来的希望增加实际的自定义页眉,如果你有机会国防部生成的协议代码,您可以覆盖GetWebRequest

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.WebRequest request = base.GetWebRequest(uri);
request.Headers.Add("myheader", "myheader_value");
return request;
}

请确保您删除的DebuggerStepThroughAttribute属性,如果你想踏进去。

我们谈论的WCF在这里? 我有问题,这里的服务电话都是不添加HTTP授权头,包装任何调用这个说法固定我的问题。

using (OperationContextScope scope = new OperationContextScope(RefundClient.InnerChannel))
{
var httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " +
Convert.ToBase64String(Encoding.ASCII.GetBytes(RefundClient.ClientCredentials.UserName.UserName + ":" +
RefundClient.ClientCredentials.UserName.Password));
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

PaymentResponse = RefundClient.Payment(PaymentRequest);
}

这是通过.NET提供基本身份验证通过HTTP或HTTPS运行SOAP调用IBM ESB。

希望这可以帮助别人,因为我已经找到解决联机巨大的问题。

如果您要发送自定义HTTP标头(而不是SOAP头),那么你需要使用HttpWebRequest类的代码如下所示:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("Authorization", token);

您不能添加使用生成的代理的Visual Studio中,它可以是一个真正的痛苦HTTP标头。

我发现这个代码,并为解决我的问题。

http://arcware.net/setting-http-header-authorization-for-web-services/

protected override WebRequest GetWebRequest(Uri uri)
{
// Assuming authValue is set from somewhere, such as the config file
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
request.Headers.Add("Authorization", string.Format("Basic {0}", authValue));
return request;
}

请参阅构建安全的ASP.NET应用程序:身份验证,授权和安全通信和搜索上的“使用特定的凭证”。 另请参阅MSDN文档为CredentialCache类。

这里是为我工作:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)base.GetWebRequest(uri);
NetworkCredential networkCredentials =
Credentials.GetCredential(uri, "Basic");
if (networkCredentials != null)
{
byte[] credentialBuffer = new UTF8Encoding().GetBytes(
networkCredentials.UserName + ":" +
networkCredentials.Password);
request.Headers["Authorization"] =
"Basic " + Convert.ToBase64String(credentialBuffer);
request.Headers["Cookie"] = "BCSI-CS-2rtyueru7546356=1";
request.Headers["Cookie2"] = "$Version=1";
}
else
{
throw new ApplicationException("No network credentials");
}
return request;
}

不要忘了这个属性设置:

service.Credentials = new NetworkCredential("username", "password");

Cookie和COOKIE2在头设置,因为Java服务不接受该请求,我正在未经授权的错误。

分类:C# 时间:2013-04-15 人气:2
本文关键词: C#,Web服务,WSDL,轴
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.386 (s). 10 q(s)