1

WCF サービス (MS CRM 2011) にアクセスしようとすると、上記のエラーが発生します。Cassini または IIS Express を使用して VS2010 デバッガーからサンプル プログラムを実行すると、問題なく動作します。認証エラーなし。

ただし、ローカルの IIS 7.5 (Windows 7 64 ビットを実行) にサイトを公開すると、CRM UserId (WhoAmIResponse) を取得する行でエラーが発生します。

Fiddler を開いて、デバッガーでの実行と IIS での実行の要求を比較しました。IIS の下で実行されているサイトでは、リクエストがまったく届かないため、そこまで到達する前に失敗しているに違いありません。

IIS に発行されたサイトには、web.config が設定されています...

    <authentication mode="Windows">
    </authentication>
    <identity impersonate="true"/>

このサイトは、プレインストールされた ASP.NET v4.0 アプリ プール、統合パイプライン モード、ApplicationPoolIdentity アカウントで実行されています。

これが私のコードです...

public class DemoController : Controller
{
    public ActionResult Index()
    {
        ClientCredentials credentials = new ClientCredentials();
        credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

        var _serviceProxy = new OrganizationServiceProxy(new Uri("http://svr-rex2011-dev/TimeEntry/XRMServices/2011/Organization.svc"),
                                                            null,
                                                            credentials,
                                                            null);

        // This statement is required to enable early-bound type support.
        _serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());

        IOrganizationService service = (IOrganizationService)_serviceProxy;

        // Display information about the logged on user.
        Guid userid = ((WhoAmIResponse)service.Execute(new WhoAmIRequest())).UserId;
        SystemUser systemUser = (SystemUser)service.Retrieve("systemuser", userid,
            new ColumnSet(new string[] { "firstname", "lastname" }));

        // Retrieve the version of Microsoft Dynamics CRM.
        RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
        RetrieveVersionResponse versionResponse =
            (RetrieveVersionResponse)service.Execute(versionRequest);

        ViewBag.FirstName = systemUser.FirstName;
        ViewBag.LastName = systemUser.LastName;
        ViewBag.Version = versionResponse.Version;

        return View();
    }

}

何か案は?とても有難い!!!

4

2 に答える 2

2

あなたが説明している状況は次のようです。IIS で実行されているアプリが CRM サービスにアクセスしようとすると、認証エラーが発生します。Visual Studio または IIS Express からアプリを実行すると、認証エラーは発生しません。

これが本当なら、アプリケーションの IIS AppPool を実行するために使用される ID が問題の原因であると確信しています。AppPool IDを、CRM サービスへのネットワーク アクセスを持つIDに変更する必要があります。通常は正しいアクセス許可を持つドメイン アカウントである必要がありますが、同じパスワードを持つローカル マシン アカウントを使用してこれを行う方法があります (ドメインが利用可能な場合は絶対にお勧めしません)。

于 2011-05-12T18:42:06.063 に答える