如何使用JSON和文档实现自托管WCF服务?

时间:2018-12-15 06:59:03

标签: .net json wcf

我有一个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无法做到这一点,我确实需要其他工具吗?

非常感谢您!

2 个答案:

答案 0 :(得分:0)

您是否也尝试过以下步骤?

  1. 添加对System.ServiceModel.Web框架的引用
  2. 使用以下几行更新app.config文件:

<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对象来解决了这个问题。

我仍然在某些方法上有问题(一种可行,其他没有),但我认为这与此无关。

此致