개념 증명으로 소액의 WCF 서비스를 만들었습니다. 나는 결국 WCF 서비스를 어떤 소비자가 URL을 통해 호출하여 일부 메소드 (비 Net 클라이언트)에 데이터를 게시 할 수 있도록 웹을 통해 매우 간단하게 노출시키고 싶어하므로 간단한 웹으로 공개해야합니다 서비스). 내 endpointBehavior에서 webHttp를 사용하는 webHttpBinding을 사용하고 WebGetAttribute가있는 서비스에 몇 가지 메서드를 추가하고 WebInvokeAttribute를 사용하여 게시물을 추가했습니다. WebGet은 문제없이 작동합니다. 웹 브라우저에서 UriTemplate에 정의 된 url 패턴을 탐색하고 url args에서 매개 변수를 전달하고 모든 데이터 유형 (XElement, string, int 등)을 반환 할 수 있습니다. WebClient.DownloadString을 통해 다른 모든 응용 프로그램 유형에서 로컬로 호출 할 수도 있습니다.Http Post 플랫폼 독립적 인 WCF 서비스에 대한 최소한의 호출
그래서 WebInvoke (Post)도 제대로 작동하지 않습니다. UriTemplate 패턴을 브라우즈하는 것은 브라우저를 통해 "GET"을하기 때문에 유효하지 않습니다. 그래서 Service - Method Not Allowed를 얻습니다. 나는 그걸로 괜찮아. 그러나 포스트를 통해 서비스를 호출하는 간단한 WebClient.UploadString을 작성하자마자 오류가 발생합니다.
처음에는 415 Method Not Allowed가 있습니다. 내가 봤는데, 내 serviceBehavior에 serviceDebug includeExceptionDetailInFaults를 활성화하고 지금 오류가 400 잘못된 요청입니다. 추가로 봤는데, 명시 적으로 WebClient.Encoding을 UTF8로 설정하고 호출하기 전에 내 Content-Type 헤더를 "application/xml; charset = utf-8"로 설정한다는 제안을 발견했습니다. 같은 것. 다른 mime 형식 (text/plain 등)을 사용하여이 작업을 시도하고 업로드 된 문자열의 형식을 키 (key = value, key = 'value', 값, 'value', \ "value \"등) 형식으로 지정했습니다. 심지어 UrlEncoding 시도했다. 나는 심지어 전체 WebClient를 폐기하고 오래된 HttpWebRequest/HttpWebResponse 경로를 갔다. 그리고 나는 여전히 같은 오류를 얻는다.
이 시점에서 나는 문제가 클라이언트 측에 있다고 생각하지 않습니다. 나는 WCF에 대해 경험이별로 없기 때문에, 거기에서 뭔가 잘못하고있을 수 있습니다. 예를 들어, 단일 서비스와 단일 끝점을 사용하고 있습니다. 노출 된 서비스 방법을 공개하고 게시하는 것은 좋습니다. serviceBehavior 및/또는 endpointBehavior에서 약간의 차이가 필요합니까? WebInvoke가 Http Post를 통해 작동한다는 몇 가지 예를 온라인에서 보았습니다. 그래서 나는 서비스에서 간단한 것을 그냥 놓친다는 것을 확신합니다.
귀하의 링크가 나를 도와 주었기 때문에 결국 허용되었습니다. 필자가 로컬 호스트의 동의어로 ipv4.fiddler를 사용하여 피들러가 선택했는지를 알지 못했습니다. WCF를 만들고 해당 호스트 이름으로 끝점을 설정하면 호출을 추적 할 수있었습니다. 내 문제는 매개 변수로 문자열을 사용하고 WCF는 일부 독점적 인 Microsoft URI로 네임 스페이스를 지정해야한다는 것입니다. 내가 정말로해야만하는 것은 param과 return 타입을 XElement로 바꾸는 것이 었습니다. thx – Rich
OK, 훌륭합니다. 솔루션의 방향으로 당신을 훔쳐 볼 수있어서 기쁩니다! :-) –