【发布时间】:2018-12-15 06:59:03
【问题描述】:
我有一个自托管 WCF 服务的 Windows 窗体项目。它已经工作了一段时间。通信是通过 XML 进行的。但是,现在我需要使用 JSON。到目前为止,我已经阅读和尝试了两天的东西,但没有运气。
所以,我是从这里开始的:
urlService = ("http://" & _ipAddress.ToString & "/mySvc")
aManager = New mySvc
host = New ServiceHost(aManager, New Uri(urlService))
Dim tBinding As BasicHttpBinding
tBinding = New BasicHttpBinding()
tBinding.Security.Mode = BasicHttpSecurityMode.None
host.AddServiceEndpoint(GetType(myInterface), tBinding, urlService)
Dim metadataBehavior As ServiceMetadataBehavior
metadataBehavior = host.Description.Behaviors.Find(Of ServiceMetadataBehavior)()
If (metadataBehavior Is Nothing) Then
metadataBehavior = New ServiceMetadataBehavior
metadataBehavior.HttpGetUrl = New Uri(("http://" & _ipAddress.ToString & "/mySvcWSDL"))
metadataBehavior.HttpGetEnabled = True
metadataBehavior.ToString()
host.Description.Behaviors.Add(metadataBehavior)
End If
host.Open()
所以,据我了解,我不能将 JSON 与 BasicHttpBinding 一起使用,因此我尝试将绑定切换为 wsHTTPBinding 和 webHTTPBinding,并更改端点或行为中的一些其他设置。有时项目运行,但它不起作用。有时项目无法启动(关于界面中的 uritemplate 装饰),有时项目启动但无法正常工作(我尝试使用该功能时出现 HTTP ERROR 405),有时出现有关 ContractFilter 和 EndpointDispatcher 的奇怪错误,等等。
另外,我改变了界面的装饰:
<ServiceContract()>
Public Interface myInterface
<OperationContract()>
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json, UriTemplate:="/LeoTest1/{Param1}")>
Function LeoTest1(Param1 As String) As String
End Interface
...以及,我的经理班:
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single, IncludeExceptionDetailInFaults:=True, AddressFilterMode:=AddressFilterMode.Any)>
Public Class mySvc
...
另外,我不知道这是否与我的项目有问题或者只是它的方式有关,但我使用 XML 端点自动创建 XML 模板以用于与我的服务通信。我也想要(需要?)那些用于 JSON 协议的模板……有可能吗?我必须向主机添加其他内容吗?不能用 SOAPUI 做到这一点,我需要另一个工具吗?
非常感谢!
【问题讨论】: