문제

첫 번째 WCF 서비스를 개발하는 과정에서 이를 사용하려고 하면 다른 설명 없이 "허용되지 않는 방법"이라는 메시지가 나타납니다.

ServiceContract 및 OperationContract를 사용하여 인터페이스를 설정했습니다.

    [OperationContract]
    void FileUpload(UploadedFile file);

실제 방법과 함께:

    public void FileUpload(UploadedFile file) {};

내가 입력하는 서비스에 액세스하려면 http://localhost/project/myService.svc/FileUpload하지만 "허용되지 않는 방법" 오류가 발생합니다.

뭔가 빠졌나요?

도움이 되었습니까?

해결책

귀하의 브라우저가 HTTP GET 요청을 보내고 있습니다:계약의 작업에 WebGet 특성이 있는지 확인하세요.

[ServiceContract]
public interface IUploadService
{
    [WebGet()]
    [OperationContract]
    string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser.

    [OperationContract]
    void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test.
 }

다른 팁

당신이 사용하는 경우 [WebInvoke(Method="GET")] 서비스 메서드의 속성을 사용하려면 메서드 이름의 철자를 "Get" 또는 "get"이 아닌 "GET"으로 입력해야 합니다. 대소문자를 구분하기 때문입니다!나는 같은 오류가 있었고 그 오류를 알아내는 데 한 시간이 걸렸습니다.

기본 내장 유형(예: byte, int, string, 및 배열)은 WCF에 의해 자동으로 직렬화됩니다.UploadedFile과 같은 사용자 정의 클래스는 그렇지 않습니다.

그래서, 어리석은 질문입니다(하지만 물어봐야 합니다...):UploadedFile은 다음으로 표시됩니다. [DataContract]?그렇지 않다면 전송하려는 클래스의 각 멤버가 [DataMember]로 표시되어 있는지 확인해야 합니다.

[XmlSerialized]로 클래스를 표시하면 직렬화하려는 멤버를 표시하지 않고도 전체 클래스를 직렬화할 수 있는 원격 작업과 달리 WCF에서는 각 멤버를 마크업해야 합니다.(나는 이것이 .NET 3.5 SP1에서 바뀌고 있다고 생각합니다...)

WCF 개발을 위한 엄청난 리소스는 우리 가게에서 "물고기 책"으로 알고 있는 것입니다. WCF 서비스 프로그래밍 Juval Lowy의 작품입니다.약간 건조하고 학문적인 다른 WCF 책과 달리 이 책은 WCF 서비스 구축에 대한 실용적인 접근 방식을 취하며 실제로 유용합니다.철저히 권장됩니다.

잘못된 주소를 사용하고 있는 것 같습니다.

내가 입력하는 서비스에 액세스하려면 http://localhost/project/myService.svc/FileUpload

이것이 클라이언트 코드에 제공한 주소라고 가정하면 실제로는 다음과 같아야 합니다.

http://localhost/project/myService.svc

나는 하루 넘게 이와 같은 문제를 겪고 있습니다. 마침내 그것을 알아 냈습니다.힌트를 주신 @Sameh에게 감사드립니다.

귀하의 서비스는 아마도 잘 작동하고 있을 것입니다.브라우저의 주소 표시줄을 사용하여 POST 메시지를 테스트하면 작동하지 않습니다.POST 메시지를 테스트하려면 Fiddler를 사용해야 합니다.

피들러 지침...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

브라우저 IE에서는 WebGet을 사용하는 메소드만 액세스할 수 있습니다.주소만 입력하면 다른 http 동사에 액세스할 수 있습니다.

Restful 서비스 시작 코드플 키트를 사용하거나 피들러를 사용하여 다른 http 동사를 테스트할 수 있습니다.

web.config에 추가해야 합니다

<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/>  

<bindings>  
    <customBinding>  
        <binding name="basicConfig">  
            <binaryMessageEncoding/>  
            <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>  
        </binding>  
    </customBinding> 

내 경우:새 서버에서 서비스를 구성합니다.ASP.NET 4.0이 제대로 설치/등록되지 않았습니다.svc 확장자가 인식되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top