2011-01-03 13 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」と入力すると、何も返されません。フィドラーでは、私はHTTP 400のエラーが表示されます。しかし、問題が何であるかについて私に何か印象を与えるものは何もありません。

誰かが私を助けて正しい方向に向けることができますか?ありがとう!

+0

Webサービスのタイプは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"/> 

(あなたのコードに一致するように名前空間を変更する)は、次の設定を使用しますあなたの.SVCファイルはのようになります

メッセージに対するWSDLを見てみると
<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.MyService" CodeBehind="MyService.svc.cs" %> 

enter image description here

+0

私はいくつかのタイプミスがありました。バインディングはwebHttpBindingで、サービス名はサービスを実装する完全修飾クラス名と一致する必要があります –

+0

http://localhost/service1.svc/IsValidRequestから返されたサービスコードを使用して、これは私のために動作します。 true

+1

OPは彼がこれをRESTベースのサービスにしたいと言っています。なぜ彼は彼が彼のサービス(serviceMetadataBehavior)のメタデータサポートを有効にすることを提案しています - これはSOAP機能です –

1

あなたはこれをしたいコメントに反応して言っているようので、無関係ですRESTベースのサービスであり、WSDLはSOAP構造です。これに基づいて、SOAPメタデータに関するものがある場合は、<serviceMetadata>の動作を削除する必要があります。

このような問題を診断するには、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を使用して同じことをする –

+0

彼は、私が設定を追加するまで、自分のコードを試してみると400エラーを取得していると言います。 RESTであってもまだWCFです。構成したくない場合は、MVCを使用してください。 –

関連する問題