2009-10-23 2 views
5

.Net 클라이언트와 독립적으로 작동하는 WCF 서비스를 만들기 위해 노력하고 있습니다. Google 및 StackOverflow 덕분에 Soap 래퍼가 없어도 간단한 xml 및 json 서비스를 만들 수 있었고 필요없는 멋진 WCF 자료를 만들 수있었습니다. 고통스러운 경험 이었으므로이 질문의 제목이됩니다. WCF는 서비스 참조를 자동으로 추가 할 때 WebGet 및 WebInvoke를 사용할 때 클라이언트 측에서 미친 버그입니다.WCF 클라이언트 (Add Service Reference)는 WebGet 및 WebInvoke를 싫어합니다. 실제로는 없습니다.

통신을 검사하기 위해 로컬로 WCF 클라이언트를 만들고 모든 것을 Fiddler을 통해 전달했습니다. 그런 식으로 작동 여부에 관계없이 적어도 클라이언트가 보내려는 것을 볼 수 있습니다. 그리고 마침내 작동하면 양쪽에서 보낸 데이터를 볼 수 있고 비 -Net 클라이언트에서이 통신을 복제 할 수 있습니다.

현재 문제는 POST 데이터를 json (enableWebScript 비헤이비어)으로 예상하도록 서비스를 변경하면 클라이언트는 아무런 아이디어도없고 XML로 객체를 보내려고 시도한다는 것입니다. 나는 서비스 레퍼런스를 사용할 때 자동으로 제대로 설정되지 않는 클라이언트의 설정과 관련하여 많은 문제를 겪었으므로 클라이언트의 app.config에 추가 할 수있는 간단한 방법이되기를 기대한다. XML을 사용할 때 서비스에서 만들고 사용하는 객체는 클라이언트에 의해 자동으로 XML 직렬화됩니다 (가장 편리합니다). WCF의 현재 버전에서 json으로 할 수 있습니까?

필자는 필자가 수동으로 수행해야 할 작업을 파악하고 Fiddler (요청 작성자)와 함께 원시 형식으로 작업하도록 만들 수 있으므로 코드에서 개체를 직렬화하고 수동으로 데이터를 보낼 수 있습니다 http 게시판을 통해 ... 그게 내가 비 - 닷넷 클라이언트에서하는 방법입니다. 어쨌든. 이것은 WCF 측면을 더 잘 이해하는 데 더 많은 질문이며, 문제를 해결할 수있는 문서가 거의없는 클라이언트 측에서 너무 많은 특성이 누락 된 이유입니다.

+0

남자 .. 나는 이것을 더 일찍 읽었 으면 좋겠다. 기본적으로 똑같은 생각 과정을 거쳤습니다. 나는 REST 클라이언트가 SOAP 클라이언트처럼 "작동하도록"기대했다. –

+0

WCF에 묶여 있습니까? 아니면 서버/서비스 페이로드 기술 옵션이 있습니까? 2 년 전이 게시물을 게시 한 이후로 WCF를 사용하는 데 아무런 문제가 없었습니다. 내가 직접 만들거나 소비하는 모든 서비스는 경량의 xml 및/또는 json 데이터를 구축하고, WCF가 개발자를 위해 더 편리하게 만들려고했던 내 자신의 보안과 다른 것을 굴립니다. 나는 WCF 서비스로 공개 된 대중적인 공중 웹 API를 발견하는 것이 실질적으로 불가능하다고 말하고 있습니다. – Rich

+0

아니요, 우리는 WCF에 묶여 있지 않지만 우리가 우리 서비스 중 하나를 시도해 볼 수 있다고 생각합니다. 우리가 모든 것을 이해할 때까지 WCF를 사용하여 서버 측 구성 요소를 작성하는 것은 힘들었습니다. 비록 ... 손으로 끝점을 만들지 않아도 좋았지 만 (우리는 SOAP/REST/JSON 모두 작동 함).이제 우리가 .NET 클라이언트를 사용하고 다른 사람들이 REST/JSON을 사용하게하면 SOAP 만 사용한다는 것을 알게되었습니다. –

답변

3

WCF 서비스 참조는 자체 설명하는 RPC 페이로드 (예 : SOAP, wsHttp 등)입니다. 마찬가지로 WCF 강력한 형식의 클라이언트는 모든 유형 정보 등을 브로드 캐스팅 할 수 있기 때문에 RPC 페이로드 만 사용해야합니다. 올바르게 작동하는 데 필요합니다.

webget 및 webinvoke를 사용할 때 RTP 서비스를 작성하지 않는 비 rpc 서비스를 작성하고 있으며 이는 자체 설명이 아니므로 서비스 참조 기능에 이상적이지 않습니다.

물론이 .Net 클라이언트를 작성할 수는 있지만 WebClient/WebRequest를 사용하여 손쉽게 작성하고 XML/Json 요청/응답을 수동으로 형식 지정/읽거나 DataContractSerializer 및 DataContractJsonSerializer를 사용하면 훨씬 쉽습니다. 그걸 돕기 위해).

1

SOAP은 (WSDL을 통해) 자체 설명합니다.

WebGet/WebInvoke는 클라이언트가 XML 대신 JSON을 사용하도록 지시하는 메타 데이터를 노출하지 않습니다.

관련 문제