2012-09-18 181 views
1

我有一个WCF服务与WCF客户端很好地配合,但是我需要它的客户端中最关键的客户端是ASMX客户端。我如何使我的WCF服务与ASMX客户端兼容?为ASMX客户端公开WCF服务

我已经按照this guide但无济于事(虽然我知道100%肯定,我已经正确地实现它)

下面是我的ServiceContract和OperationContracts。我的Web.config没有MEX端点。

<ServiceContract()> 
<XmlSerializerFormat(Use:=OperationFormatUse.Literal, Style:=OperationFormatStyle.Document)> 
Public Interface racoSMS 
    <OperationContract(Action:="http://tempuri.org/ReceiveSMS", ReplyAction:="http://tempuri.org/ReceiveSMS")> 
    Function ReceiveSMS(ByVal securityKey As String, ByVal from As String, ByVal message As String) As ServiceResult 
    <OperationContract(Action:="http://tempuri.org/Test", ReplyAction:="http://tempuri.org/Test")> 
    Function Test(ByVal securityKey As String) As ServiceResult 
End Interface 
+1

你使用什么绑定?什么是错误?你有什么尝试? – Paciv

+0

最初我以为WCF会默认使用ASMX,所以我没有做任何不寻常的事情,但是收到了与尝试连接的ASMX客户端的合同不匹配错误。我已经将XmlSerializerFormat和Action操作位添加到OperationContracts中。我已将绑定更改为BasicHTTPBinding,但尚未完成。 – GoodBoyNYC

+0

什么是错误? – Paciv

回答

1

你的问题很模糊。需要注意的几点:

  • 是的,您可以使用WCF创建与ASMX风格的Web服务兼容的服务。
  • 使用BasicHttpBinding强烈推荐。
  • 传输安全性(SSL)应该是可能的,但除此之外,还要小心一些奇特的特性(例如,我认为ASMX的支持消息安全性不是这样)。
  • 注意数据和服务合同的名称空间,确保它是ASMX方面期望的(或准备在该方面更改代码)。与Action和ReplyAction一样(我可以从你的示例代码中看到你已经注意到了这一点)。
  • 你需要什么序列化类型和SOAP风格确实取决于客户端期望的内容,相应地使用属性。
  • 我听说Web Service Enhancements以一些功能参加ASMX端,但没有使用它自己。

事实上,我想这几乎是你的问题的答案。你说你做了这些“无济于事”,但你需要更具体一些(无论是在这里,还是可能在新的问题),以帮助我们。

+0

我遵循了我在OP中链接的指南,尽可能接近。我唯一的测试方法是启用该服务并查看它是否开始处理来自ASMX客户端的消息队列。我相信我错过了事物的命名空间。我不知道WCF可能有一个命名空间(对它来说还是比较新的)。 – GoodBoyNYC

+0

谢谢。这是我需要朝正确的方向前进的东西。有一个问题,我试图在我的serviceContract(http://foobar.com:777/foo“)中包含一个命名空间,但是我失去了功能。我定义的任何方法都丢失了。我该如何解决这个问题? – GoodBoyNYC

+0

很高兴能听到它的帮助,我不确定你的意思是“失去”,但如果你开始一个新的SO问题,或者有更多的细节等,你可能会获得最大的成功。 – Jeroen

相关问题