타사 개발자가 우리 소프트웨어에 연결할 수 있도록 WCF를 사용하여 일반 웹 서비스 인터페이스를 구축하려고합니다. 많은 어려움과 읽기 (this question 많은 도움이 됨)를 마침내 SOAP, JSON 및 XML (POX)이 함께 작동했습니다. UriTemplate을 사용하여 WCF에서 SOAP/JSON/XML을 결합했습니다.
여기 내 코드입니다, 단순화하기 (I는 인터페이스를 사용하지 않는,이 예를 간단하게하는 -이 두 가지를 시도했다) :<ServiceContract()> _
Public Class TestService
Public Sub New()
End Sub
<OperationContract()> _
<WebGet()> _
Public Function GetDate() As DateTime
Return Now
End Function
'<WebGet(UriTemplate:="getdateoffset/{numDays}")> _
<OperationContract()> _
Public Function GetDateOffset(ByVal numDays As Integer) As DateTime
Return Now.AddDays(numDays)
End Function
End Class
와의 Web.config 코드 :
을<services>
<service name="TestService"
behaviorConfiguration="TestServiceBehavior">
<endpoint address="soap" binding="basicHttpBinding" contract="TestService"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="TestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="TestService"/>
<endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript/>
</behavior>
<behavior name="poxBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
이것은 실제로 작동합니다. xml은 TestService.svc/xml/GetDate
, json은 TestService.svc/json/GetDate
, SOAP 클라이언트는 TestService.svc?wsdl
이고 SOAP 쿼리가 작동합니다.
수정하고 싶은 부분은 쿼리입니다. TestService.svc/xml/GetDateOffset/4
대신 TestService.svc/xml/GetDateOffset?numDays=4
을 사용해야합니다.
Endpoints using 'UriTemplate' cannot be used with 'System.ServiceModel.Description.WebScriptEnablingBehavior'.
그러나 <enableWebScript/>
를 사용하지 않고 물론
제가 생각했던 것 외에 다른 3 가지 서비스 (.svc 파일)가 있습니다. 모두 계약을 지정하는 인터페이스를 구현하지만 클래스는 각각 다른 WebGet/WebInvoke 특성을 지정합니다. 수업. 이것은 많은 추가 작업처럼 보입니다. 솔직히 프레임 워크가 왜 나를 위해 처리하지 않는지 나는 알지 못합니다. 클래스의 구현은 속성을 제외하고는 모두 동일합니다. 즉, 시간이 지남에 따라 버그/변경이 한 구현에서는 고정/완료되고 JSON과 비교할 때 일관성없는 동작으로 이어지게됩니다. 예를 들어 SOAP 구현.
여기 뭔가 잘못 되었나요? WCF를 완전히 오용하고 잘못 사용하고 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?
내 경험으로 웹 물건을 다룰 때 일부 종류의 프레임 워크를 처리 할 수 있어야한다고 생각합니다 ... 나는 그것을 구축하는 방법에 대한 내 머리 속에 아이디어가 있습니다. WCF가이 일을하기로되어있는 것 같아요. 그리고 저는 정말로 바퀴를 다시 만들고 싶지 않습니다.
여기의 코드 예제는 매우 유용했습니다! 나는 JSON 바인딩을 가지고 있었고 .net 응용 프로그램에서 서비스를 사용할 수 없다는 것을 알았습니다. :) – Shawson
[ASP.NET 웹 API] (http://www.asp.net/web-api)에서 이제는 완전히 폐기 된 것으로 간주됩니다. 이 질문의 원인이 된 코드는 오랫동안 웹 API를 사용하여 다시 작성되었습니다. 나는 당신이 [어두운 시대에 머물면서 SOAP을 정말로 필요로하지 않는] W5C를 사용하지 말 것을 강력히 권합니다. (http://stackoverflow.com/questions/11317572/asp-net-webapi-soap). – gregmac