我正在基于现有SOAP XML服务开发REST API(ASP.NET Web API)包装。想法是我的API从客户端获取请求,然后内部调用现有的SOAP API,对接收到的响应进行一些操作,并将修改后的数据作为RESTful响应返回给客户端。 SOAP服务托管在其他服务器上。我正在Web API中使用从SOAP服务的WSDL生成的代理类。我正在以编程方式将授权标头添加到SOAP请求-
private static Dictionary<string, string> GetHttpHeader()
{
string userName = "xxxxxxxxxx";
string passWord = "xxxx";
var httpHeaders = new Dictionary<string, string>();
httpHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord)));
// httpHeaders.Add("Accept-Encoding", "gzip");
return httpHeaders;
}
在发送这样的请求之前,此标头已添加到EndpointBehavior-
try
{
req.TargetBranch = Constants.TargetBranch;
var httpHeaders = GetHttpHeader();
client.Endpoint.EndpointBehaviors.Add(new HttpHeadersEndpointBehavior(httpHeaders));
lowFareSearchRsp = client.service(null, req);
return rsp;
}
catch (Exception e)
{
client.Abort();
throw e;
}
从Visual Studio运行时,此方法工作正常。但是,当我将其托管在IIS中时,问题开始出现。我已经尝试过IIS 7.5和IIS 10.0。
我的应用程序池使用内置的Identity-LocalSystem,并且REST API通过身份验证进行托管。我也尝试了其他组合-结果相同。
我已经使用提琴手将请求的标头与SOAP进行比较-从Visual Studio运行时以及从IIS运行应用程序时。
明显的区别是,在IIS传出请求的情况下,我添加到SOAP服务请求的标头不存在。
我很困惑-有人可以告诉我这里出了什么问题吗?