【发布时间】:2014-05-11 13:14:49
【问题描述】:
我继承了一个在我们公司已经使用了一段时间的代码,现在我不知道它到底有什么问题。废话不多说,直接进入正题。
它是如何工作的
我们的通信系统设置如下: JavaScript Web 服务代理 Web 服务 基本上,JavaScript 将调用哪个服务、哪个方法和哪个参数发送到代理,然后代理构造 Http 请求,然后将其发送到我们的 Web 服务之一。
有什么问题?
现在发生的新情况是我正在尝试将 SOAP 标头附加到 Http 请求。 Rigt 现在,JavaScript 代码无关紧要 - 我相当确定问题出在代理和 Web 服务之间。构造 HTTP 请求的代码如下所示:
HttpWebRequest basicRequest = (HttpWebRequest)WebRequest.Create(this.url);
basicRequest.ContentType = "application/json; charset=\"utf-8\"";
basicRequest.Method = "POST";
basicRequest.AllowWriteStreamBuffering = false;
if (Ticket != string.Empty && Ticket != null)
{
basicRequest.Headers["UserAuthenticationHeader"] = Ticket;
}
现在当我在调用之前检查请求时
this.HttpResponse = (HttpWebResponse)HttpRequest.GetResponse();
方法,调试器告诉我标头在那里。更准确地说,这些是 Headers 属性的内容:
{Content-Type: application/json; charset="utf-8"
UserAuthenticationHeader: user;ticket
Host: localhost:25691
Content-Length: 55
Expect: 100-continue}
现在,刚刚调用了 Web 服务中的适当方法。现在我希望这段代码:
public class UserAuthenticationHeader : SoapHeader
{
public string Ticket { get; set; }
}
[WebService(Namespace = "http:*****", Description = "")]
[System.Web.Script.Services.ScriptService]
public class DataGetService : System.Web.Services.WebService
{
public virtual UserAuthenticationHeader UserAuthenticationHeader { get; set; }
[WebMethod(Description = "Gets all modules")]
[SoapHeader("UserAuthenticationHeader")]
public ModulesDS GetMetadataModules(Guid GlobalUserId)
{
Authentication.Authenticate(UserAuthenticationHeader);
return Sql.GetMetadataModules(GlobalUserId);
}
}
将根据几篇 MSDN 文章填充 UserAuthenticationHeader 的内容,这会将“UserAuthenticationHeader”的值插入到 UserAuthenticationHeader 属性中。但事实并非如此。当我到达这里时,它是空的。所以,是的,我做错了什么?在过去的 5 个小时里,我一直在努力解决这个问题,但我什么也想不通。我通常无法传输任何标题,我什至尝试通过 SoapUnknownHeader 解析无济于事。
我已经尝试遵循一些关于如何发送soap 标头的教程,但我大多只是编写了应用程序中已经存在的相同代码。我尝试了将标头插入 HttpWebRequest 的不同方法,但基本上都是做同样的事情(不足为奇)。除此之外,我还没有找到任何关于这种特定交流的好消息来源,所以我被困住了。
【问题讨论】:
标签: c# asp.net web-services soap asmx