2

単純なWCFRESTfulWebサービスを作成しようとしていますが、SOAPモードでのみ機能するようです。ローカルIISでサービスをホストしています。

それは本当に標準に見えます:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    Guid Login(string username, string password);
...

と:

public class MyService : IMyService
{
    [WebGet(UriTemplate = "login?user={user}&password={password}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    public Guid Login(string username, string password)
    {
        return Guid.Empty;
    }

また、構成ファイルに動作を含め、次の場所で使用していました。

<endpoint address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="webHttp"/>

私が知っているすべての例によると...

これで、ServiceReferenceを使用するスタブクライアントからログインを呼び出す場合、Fiddlerでは問題なく表示されますが、SOAPyです。何らかの理由で、RESTyの方法でサービスを呼び出すことができません。/helpでさえ、400BadRequestを返すようです。(http:// localhost:8080 / MyService.svc /helpまたは/loginなどを呼び出しています)

RESTがアクションを実行するのを妨げているのは何ですか?前もって感謝します :)

編集:私は答えを見つけました。

ルーティングを定義する必要があることがわかりました...

これをGlobal.asaxに追加した後:

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("MyService",
           new WebServiceHostFactory(), typeof(MyService)));
    }

それはうまくいきました。

さらに、「。svc」がURLの一部ではなくなったことを確認しました。

4

2 に答える 2

1

私は同じ問題を抱えていました。その理由は、私の投稿 xml の上部に以下があったためです

<?xml version="1.0" encoding="utf-16"?>

私はそれを削除しましたが、うまくいきました!

于 2012-12-12T20:11:14.843 に答える
1

あなたのコードは私には良さそうです。いくつか試してみませんか

[OperationContract]
[WebGet(UriTemplate = "/Login/{username}/{password}", ResponseFormat = WebMessageFormat.Xml)]
Guid Login(string username, string password);

同時に MyService.Login 関数から WebGet 属性を削除してください。

-また-

このブロックを web.config の system.web の下に配置します。

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

お役に立てれば。

于 2012-01-09T12:14:21.493 に答える