【发布时间】:2017-12-13 20:10:32
【问题描述】:
最近我升级了我的 ASMX Web 服务,它向 WCF 公开了两个操作,以便与不同的消费者一起工作。通过此次升级,WSDL SOAP Action 从<namespace>/<operation> 更改为<namespace>/<service>/<operation>。问题是,我仍然需要能够让以前的消费者使用我的服务,而他们只有我以前的 WSDL 定义。当他们发送请求时,会收到 HTTP 500 错误。
我尝试过的:
- 强制我的 OperationContract 方法响应
Action="*",这工作正常,直到我对其他操作执行相同操作。我了解到我不能有多个 OperationContract 方法来响应任何肥皂操作。 - 使用某种处理程序来捕获
ProtocolException,如IHttpModule或IErrorHandler,并将请求重定向到所需的操作。我已经成功注册了我的IHttpModule课程,但我无法从任何EventHandler的请求中获得任何有效信息。IErrorHandler甚至不起作用。
有什么办法可以做到吗?
我的服务等级:
namespace sappi
{
[ServiceContract(Namespace = "sappi")]
[XmlSerializerFormat]
public interface IService
{
//[OperationContract]
[OperationContract(Action = "*", ReplyAction = "*")]
int put(Service.PutRequest putRequest);
[OperationContract]
int confirm(Service.ConfirmRequest confirmRequest);
}
我的IHttpModule班级:
namespace sappi
{
public class Handler : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(beginRequest);
application.EndRequest += new EventHandler(endRequest);
}
private void beginRequest(Object source, EventArgs e)
{
//Log stuff...
}
private void endRequest(Object source, EventArgs e)
{
//Log stuff...
}
public void Dispose()
{
throw new NotImplementedException();
}
提前谢谢你。
【问题讨论】:
标签: c# web-services wcf soap wsdl