最近我升级了我的ASMX Web服务,它向WCF公开了两个操作,以便与不同的消费者一起工作。通过此升级,WSDL SOAP Action从<namespace>/<operation>
更改为<namespace>/<service>/<operation>
。问题是,我仍然需要能够让我以前的消费者使用我的服务,他们只有我以前的WSDL定义。当他们发送请求时,会收到HTTP 500错误。
我尝试了什么:
Action="*"
,这一点工作正常,直到我对其他操作做了同样的操作。我已经知道我不能有多个OperationContract方法来响应任何soap动作。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();
}
提前谢谢。
答案 0 :(得分:0)
从ASMX到WCF的升级Web服务的向后和向前兼容性
虽然您可能会将ASMX和SOAP服务融合到一个系统中,但它们会因为它们都会争夺HTTP所有权而相当棘手。
相反,您可能最好维护原始ASMX服务并创建新 SOAP服务。
这允许两个端点:
接下来,您需要重构原始服务,以便所有业务逻辑都在一个新的公共服务无关库中,您的ASMX和SOAP服务都可以使用它。
一旦完成,两个服务中的代码应该是最小的,同时允许通过ASMX端点向后兼容以及SOAP端点中的未来扩展。