2011-06-24 14 views
0

私はWCF serviceにPOSTリクエストを作成しようとしているように、私は私がPORT 8181jQuery.POST:呼び出されていないWCFサービスを呼び出す!

WCFサービスメソッドでWebHttpBindingと私のWCF service is hosted in Windows serviceを使用していPOST the service requestcan't get response.

にできることではないのです。

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "/{cstid}/{deptid}/get/customer/?cstname={cstname}", 
    BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json)] 
Customer CustomerGet(string cstid, string deptid, string cstname); 

jQueryのPOSTメソッド

jQuery.ajax({ 
    type: 'POST', 
    url: 'http://localhost:8181/mysite/e48/91/get/customer/?', 
    dataType: 'json', 
    contentType: "application/json; charset=utf-8", 
    processData: false, 
    success: function (data) { 
     alert(data); // not getting anything :(
    }, 
    error: function (XMLHttpRequest, textStatus, errorThrown) { 
     alert('Error :' + textStatus); 
    } 
}); 

私はこのサービスを呼び出すことができない理由を教えていただけますか?どのようにこの問題を解決しますか?

ありがとうございます!

+0

firebugでfirefoxを使用していますか?コンソールにポストが表示されていますか?応答はどのように見えるのですか? – Patricia

+0

私は答えはありませんが、これはWCF用のRESTキットを使用していますか? – Mayo

+0

あなたのサービスURLのクエリ文字列が、構築されたjquery呼び出しで見つからないという誤植ですか? –

答えて

0

あなたのUriTemplate:

/{cstid}/{deptid}/get/customer/?cstname={cstname} 

あなたのjQueryのURL:あなたはcstnameが欠けているよう

/e48/91/get/customer/? 

が見えるので、クエリ文字列パラメータがに必要とされていないので、実行時に値がnullになりますUriTemplateにマッチします。あなたは実装を表示していませんが、私はCustomerがnullを受け入れていることを確認していますが、実際のインスタンスを見つけずにnullを返すと推測しています。

+0

WCFサービスがhttp:// localhost:8181 PORTでホストされている間、私はhttp:// localhost:8080 PORTでMVCサイトを実行しているので、クロスドメインのポストの問題があると思います。私はこれを解決する? – nunu

0

あなたUriTemplateは、あなたは、少なくとも{} cstnameのためのパラメータを渡すべきである

UriTemplate = "/{cstid}/{deptid}/get/customer/?cstname={cstname}", 

ですので。たとえば、これを試してみてください。私の意見で

jQuery.ajax({ 
type: 'POST', 
url: 'http://localhost:8181/mysite/e48/91/get/customer/?', 
data: { cstname: "nunu" }, 
dataType: 'json', 
contentType: "application/json; charset=utf-8", 
processData: false, 
success: function (data) { 
    alert(data); // not getting anything :(
}, 
error: function (XMLHttpRequest, textStatus, errorThrown) { 
    alert('Error :' + textStatus); 
}}); 

を、それは価値があるよりも多くの問題であるのWebGet業務以外の目的でWCFのWeb HTTPサービスを使用して。

+0

WCFサービスはhttp:// localhost:8181 PORTでホストされていますが、http:// localhost:8080 PORTを使用してMVCサイトを実行しているので、CROSS DOMAINのポストの問題があると思います。私はこれを解決する? – nunu

+0

はい。 (a)POSTの代わりに "GET"を使用するか、または(b)contentTypeをまったく指定しないでください。私にとって、私はいつも(a)働いています。 3つの文字列パラメータの場合、なぜPOSTを行う必要がありますか? GETを使う方がはるかに簡単で、失敗する可能性はずっと少なくなります。そのため、ほとんどの場合、タイプを「GET」にしています。これは、WCFサービスをPOSTで正しく機能させることが非常に難しいためです。可能であればWebInvokeではなくWebGetを使用する –

関連する問題