18

ajax json 経由で WCF サービスを呼び出すと、上記の応答が返されます。私の呼び出しコードは次のとおりです。

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax
        ({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "http://localhost:90/WebServices/UserService.svc/Calculate",
            data: "{}",
            timeout: 10000,
            dataType: "json",
            success: function (response) {
                alert(response)
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.statusText);
                alert(thrownError);
            }
        });
    });
</script>

私のサービスは:

[ServiceContract]
public interface IUserService
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json
     )]
    Answer Calculate();
}

[DataContract]
public class Answer
{
    [DataMember]
    public string answer { get; set; }
}

私の方法は:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class UserService : IUserService
{
    public Answer Calculate()
    {
        Answer answer = new Answer();
        answer.answer="Hello World";
        return answer;
    }
}

私はしばらくの間戦ってきましたが、他の人が同じタイプの問題を抱えているのを見て、そこにあるすべての提案を試しましたが、まだ何も機能していません.

問題はどこだ?どうすれば解決できますか?

4

3 に答える 3

22

エンドポイントをどのように定義したかを示していないので、ここで推測していますが、確かにそうです。エンドポイントはWeb消費用に定義されていません-おそらくを使用してbasicHttpBindingいます。jQuery(または一般的に他のWeb / RESTクライアント)を介してエンドポイントを使用するには、でエンドポイントを定義しWebHttpBinding、それに適用する必要がありますWebHttpBehavior

エンドポイントを正しく定義するには、さまざまな方法があります。最も簡単な方法はWebServiceHostFactory、.svcファイルでを使用することです。

UserService.svc

<%@ ServiceHost Language="C#" Debug="true" Service="YourNamespace.UserService"
                Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>
于 2013-01-18T17:14:35.857 に答える
1

検索してここにたどり着いた人は誰でも: 'content type 'application/json; charset=utf-8' は予期されたタイプの 'text/xml ではありませんでした。文字セット=utf-8'

私の場合、適切な属性なしでサービスを構築して実行すると、同様のエラーが発生しました。クライアント アプリケーションでサービス参照を更新しようとしたときに、このエラー メッセージが表示されました。'[DataContract]' および '[DataMember]' 属性をカスタム クラスに正しく適用すると解決しました。

編集:これは、サービスがセットアップされて機能していて、編集後にサービスが壊れた場合に最も当てはまります。

于 2016-07-18T22:05:54.663 に答える