0

別のWCFRESTサービスと通信する必要があるWCFRESTサービスがあります。

3つのWebサイトがあります。

  • デフォルトのWebサイト
  • ウェブサイト1
  • ウェブサイト2

デフォルトのWebサイトで両方のサービスを設定しHttpClient、URI http:// localhost / serviceを使用して(を使用して)もう一方に接続すると、すべて問題ありません。

必要な設定は、これら2つのサービスを別々のWebサイトに移動し、URI http:// localhost / serviceを使用するのではなく、http : //website1.domain.com/serviceを介してサービスにアクセスすることHttpClientです。

私は例外を受け取りました:

System.ArgumentOutOfRangeException:Unauthorized(401)は次のいずれでもありません:OK(200)、Created(201)、Accepted(202)、NonAuthoritativeInformation(203)、NoContent(204)、ResetContent(205)、PartialContent(206)

これは401であることがわかりますが、ここで何が起こっているのでしょうか。

ありがとう

4

3 に答える 3

0

私は例外を受け取りました:

「私」は誰?Web サービスの 1 つですか、それとも他のクライアントですか?

私が物事を正しく理解している場合、401はその 1 つではなく、さまざまな応答を期待しているように見えるのは受信側です。おそらく、「この範囲」の応答を期待して X を実行するエラー チェック コードです (そして、401 はこれらのいずれでもないか、または x 応答を説明する「既定の」方法はありませんか?)。

つまり、401 は承認エラーであるため、最初に 401 応答を引き起こす「I」によって満たされていない可能性のあるServiceAuthorizationManagerおよび/または同様の設定を確認してください。

ひ...

于 2012-04-21T15:09:42.500 に答える
0

私の推測では、承認ヘッダーまたは資格情報が不足しています。

これをチェックしてください:

于 2012-04-22T10:50:51.047 に答える
0

これは、Web サービスの設定に関連していると思います。新しいサービスの GET、POST、Put、DELETE ハートビート呼び出しを作成し、フィドラーからそれらをチェックするのが最善です。401 を受け取った場合は、アプリ プール ID が何かにアクセスできなかったことを意味している可能性があります。

それを修正する手順:

  1. WCF パブリッシュ フォルダーで、ユーザーに読み取り/書き込み/変更/実行/..同様の権限を付与します。
  2. 統合された .net 4 でこのサイトのアプリ プールを作成する
  3. このユーザーをアプリケーション プール ID に設定し、匿名モードを有効にします
  4. PUt、Delete動詞も有効にする

呼び出しをテストするためのサービスのハートビート クラスの一部:

  [DataContract]
public class StatusInfo
{
    [DataMember]
    public string MachineName { get; set; }

    [DataMember]
    public string IpAddress{ get; set; }

    [DataMember]
    public string Methodname { get; set; }

    public override string ToString()
    {
        return "Machinename:" + MachineName + " ;IP:" + IpAddress + "; Method:" + Methodname;
    }
}

private void ResolveStatus(StatusInfo statusInfo,string methodname)
    {
        try
        {
            var context = System.ServiceModel.OperationContext.Current;

            RemoteEndpointMessageProperty property =
                (RemoteEndpointMessageProperty)
                context.IncomingMessageProperties[RemoteEndpointMessageProperty.Name];


            statusInfo.IpAddress = property.Address;
            statusInfo.MachineName = Environment.MachineName;
            statusInfo.Methodname = methodname;

        }catch(Exception ex)
        {

        }
    }
/// <summary>
    /// create task
    /// </summary>
    /// <param name="taskwrapped"></param>
    [WebInvoke(Method = "POST", UriTemplate = "", RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public StatusInfo postcall()
    {
        StatusInfo statusInfo = new StatusInfo();
        logger.Trace(Tagname + "postcall");
        ResolveStatus(statusInfo, "POST");
        return statusInfo;

    }


    /// <summary>
    /// edit task
    /// </summary>
    [WebInvoke(Method = "PUT", UriTemplate = "", RequestFormat = WebMessageFormat.Json,
              ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public StatusInfo Edit()
    {
        StatusInfo statusInfo = new StatusInfo();
        logger.Trace(Tagname + "Edit");
        ResolveStatus(statusInfo, "PUT");
        return statusInfo;

    }

    //delete request with taskid
    [WebInvoke(Method = "DELETE", UriTemplate = "", RequestFormat = WebMessageFormat.Json,
     ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public StatusInfo DeleteCall()
    {
        StatusInfo statusInfo = new StatusInfo();
        logger.Trace(Tagname + "Edit");
        ResolveStatus(statusInfo, "DELETE");
        return statusInfo;

    }


    //delete request with taskid
    [WebInvoke(Method = "DELETE", UriTemplate = "/{recordid}", RequestFormat = WebMessageFormat.Json,
     ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    public StatusInfo DeleteCallWithParam(string recordid)

    {
        StatusInfo statusInfo = new StatusInfo();
        logger.Trace(Tagname + "Edit");
        ResolveStatus(statusInfo, "DELETE/"+recordid);
        return statusInfo;

    }



enter code here
于 2012-04-16T03:39:02.980 に答える