我有一个Windows窗体项目,该项目可以自托管WCF服务。它已经工作了一段时间了。通信是通过XML进行的。但是,现在我需要使用JSON。到目前为止,我已经阅读和尝试了两天了,没有运气。
所以,我从这里开始:
Base
因此,据我了解,我无法将JSON与BasicHttpBinding一起使用,因此我尝试将绑定切换为wsHTTPBinding和webHTTPBinding,并更改了端点或行为中的其他设置。有时项目会运行,但无法正常工作。有时项目无法启动(关于界面中的uritemplate装饰),有时项目已启动但无法正常工作(当我尝试使用该功能时出现HTTP错误405),有时关于ContractFilter和EndpointDispatcher的奇怪错误,等等。
此外,我还更改了界面的装饰:
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()
...以及我的经理班级:
<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
此外,我不知道这是关于我的项目的问题还是它的原状,但是对于XML端点,我使用SOAPUI自动创建XML模板以用于与我的服务进行通信。我也想要(需要?)那些用于JSON协议的模板...可能吗?我必须向主机添加其他内容吗?使用SOAPUI无法做到这一点,我确实需要其他工具吗?
非常感谢您!
答案 0 :(得分:0)
您是否也尝试过以下步骤?
<system.serviceModel>
<services>
<service name="YourServiceName">
<endpoint address="http://localhost:YourPort/service1" binding="webHttpBinding" contract="YourServiceName.IService1" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior>
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
答案 1 :(得分:0)
我不知道发生了什么,但是我通过将ServiceHost对象替换为WebServiceHost对象来解决了这个问题。
我仍然在某些方法上有问题(一种可行,其他没有),但我认为这与此无关。
此致