2011-01-03 3 views
2

WCF에 대해 잘 모릅니다. 그러나 나는 실행하려고하는 아주 기본적인 서비스를 가지고있다. 내 서비스 코드는 다음과 같습니다.WCF 서비스가 WebGet을 사용할 때 400 오류를 반환합니다.

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
[ServiceBehavior(IncludeExceptionDetailInFaults = false)] 
[ServiceContract] 
public class MyService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/IsValidRequest")] 
    public bool IsValidRequest() 
    { 
     return true; 
    } 
} 

내가 말했듯이 매우 기본적인 서비스입니다. 내 브라우저에 "http : // localhost : [port] /MyService.svc"를 입력하면 서비스 설명 페이지가 나타납니다. 그러나, "IsValidRequest"내가 (아마 이것은 .asmx의 경우에만 발생합니다)라고 생각하는 것처럼 나열되지 않습니다. 어느 쪽이든, "http : // localhost : [port] /MyService.svc/IsValidRequest"를 내 브라우저에 입력하면 아무 것도 반환되지 않습니다. Fiddler에서 HTTP 400 오류가 발생하는 것을 확인했습니다. 그러나 문제가 될 수있는 것에 관해서 나에게 아무런 징조도주지 못합니다.

누군가 나를 도와주고 올바른 방향으로 나를 가리킬 수 있습니까? 감사!

+0

웹 서비스의 유형은 SOAP & REST가 혼합 된 것 같습니다. – ShahidAzim

+0

아마도 내 문제입니다. 나는 이것이 순수한 REST 서비스가되기를 원한다. 나는 그것이 내가이 설정을 가지고 있었던 방법이다라고 생각했다. 어쨌든, 내가 뭘 잘못하고 있는지 모르겠다. – user70192

+1

** web.config **는 어떤 모습입니까 ?? 섹션은 매우 흥미로울 것입니다! 또한 : 당신은 또한'MyService.svc' 파일의 내용을 게시 할 수 있습니까? –

답변

4

(코드와 일치하도록 네임 스페이스 변경) 다음 설정을 사용

<services> 
    <service name="WcfService1.MyService" behaviorConfiguration="GetBehavior"> 
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior" contract="WcfService1.MyService"> 

    </endpoint> 

    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="GetBehavior"> 

     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="WebBehavior"> 
     <webHttp />   
    </behavior> 
    </endpointBehaviors> 

</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/> 

당신은 당신이 원하는 코멘트에 대한 응답에서 말했듯이 때문에

enter image description here

+0

나는 약간의 오타가 있었다.바인딩은 webHttpBinding이어야하고 서비스 이름은 서비스를 구현하는 정규화 된 클래스 이름과 일치해야합니다. –

+0

http : //localhost/service1.svc/IsValidRequest가 제공하는 서비스 코드를 사용하여 나를 위해 작동합니다. true

+1

OP는 그가 REST 기반 서비스가되기를 원합니다. 왜 자신의 서비스 (serviceMetadataBehavior)에서 메타 데이터 지원을 사용 하시겠습니까? 이것은 SOAP 기능입니다. –

1

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.MyService" CodeBehind="MyService.svc.cs" %> 
이 메시지에 대한 WSDL을 보면 관련이 :

귀하의 SVC는 파일과 같은 것이 보일 것입니다 REST 기반 서비스이고 WSDL은 SOAP 구조입니다. 그 근거로 <serviceMetadata> 비헤이비어를 SOAP 메타 데이터와 관련하여 제거해야합니다.

이와 같은 문제를 진단하려면 WCF에서 추적 기능을 켜야합니다 (짧은 스크린 캐스트 here에서이를 수행하는 방법을 보여줍니다). 이 문제가

추가하여는 system.serviceModel 섹션에서 설정 파일에 다음과 같은 서비스에 대한 설정에 섹션을 추가하지 않고 REST 배관을 연결할 메시지를 처리하는 무엇을 강조해야

<protocolMapping> 
    <add scheme="http" binding="webHttpBinding"/> 
</protocolMapping> 
<behaviors> 
    <endpointBehaviors> 
    <behavior> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
+0

문제점은 자신의 서비스에 대한 구성이 없다는 것입니다. 메타 데이터가 켜져 있지 않습니다. 액세스 할 수 없으면 추적 할 수 없습니다. 그의 질문을 읽으십시오. –

+0

. NET 4에서는 REST 서비스로 공개하는 서비스와 관련된 구성이 필요하지 않습니다. HTTP 매핑을 사용하여 webHttpBinding 및 webHttp의 끝점 동작에 매핑하거나 .svc 파일의 WebServiceHostFactory를 사용하여 do same the –

+0

그는 구성을 추가 할 때까지 자신의 코드를 시도 할 때 얻을 수있는 400 개의 오류가 발생했다고 말합니다. REST 일지라도 여전히 WCF입니다. 구성을 원하지 않으면 MVC를 사용하십시오. –

관련 문제