Javascript CRM 2011-443 HTTP/1.1 POST/test/XRMServices/2011/Organization.svc/web 400 2 BadRequest CRMAppPool

Javascript CRM 2011-443 HTTP/1.1 POST/test/XRMServices/2011/Organization.svc/web 400 2 BadRequest CRMAppPool,javascript,dynamics-crm-2011,crm,Javascript,Dynamics Crm 2011,Crm,我的开发人员CRM内部部署安装中有两个组织。一个是导入的生产数据库,另一个(名为Test)是在dev CRM中新建的。我的javascript SOAP例程在导入的生产组织中工作,在另一个(测试)中失败,出现401拒绝访问错误(在使用Wireshark时可见)。Windows httperr###日志将在本文标题中显示此消息 由于消息似乎表明问题是与crmappool相关的权限,我将该应用程序池(网络服务)的运行方式添加到本地administrators组并重新启动。当我重新运行javascri

我的开发人员CRM内部部署安装中有两个组织。一个是导入的生产数据库,另一个(名为Test)是在dev CRM中新建的。我的javascript SOAP例程在导入的生产组织中工作,在另一个(测试)中失败,出现401拒绝访问错误(在使用Wireshark时可见)。Windows httperr###日志将在本文标题中显示此消息

由于消息似乎表明问题是与crmappool相关的权限,我将该应用程序池(网络服务)的运行方式添加到本地administrators组并重新启动。当我重新运行javascript时,会显示相同的错误消息

我断断续续地琢磨了好几个星期。有什么想法吗?如果这是一个权限问题,是否有一个好方法可以找出谁被拒绝了对什么资源的什么权限(这样我就可以在测试组织中授予适当的权限)

谢谢

///////////////////////////////////////////////////////////////////////////////////
// With thanks, adapted from:
// http://mileyja.blogspot.com/2011/08/close-case-using-jscript-or-net-in.html
//////////////////////////////////////////////////////////////////////////////////
if (typeof (SDK) == "undefined")
{ SDK = { __namespace: true }; }
//This will establish a more unique namespace for functions in this library. This will reduce the 
// potential for functions to be overwritten due to a duplicate name when the library is loaded.
SDK.SAMPLES = {
    _getServerUrl: function () {
        ///<summary>
        /// Returns the URL for the SOAP endpoint using the context information available in the form
        /// or HTML Web resource.
        ///</summary>
        var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
        var serverUrl = "";
        if (typeof GetGlobalContext == "function") {
            var context = GetGlobalContext();
            serverUrl = context.getServerUrl();
        }
        else {
            if (typeof Xrm.Page.context == "object") {
                //serverUrl = Xrm.Page.context.getServerUrl();
                serverUrl = document.location.protocol + "//" + document.location.host + "/" + Xrm.Page.context.getOrgUniqueName();
            }
            else
            { throw new Error("Unable to access the server URL"); }
        }
        if (serverUrl.match(/\/$/)) {
            serverUrl = serverUrl.substring(0, serverUrl.length - 1);
        }
        return serverUrl + OrgServicePath;
    },
    CloseIncidentRequest: function () {
        var incidentId = Xrm.Page.data.entity.getId();
        var requestMain = ""
        requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        requestMain += "  <s:Body>";
        requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
        requestMain += "      <request i:type=\"b:CloseIncidentRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
        requestMain += "        <a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
        requestMain += "          <a:KeyValuePairOfstringanyType>";
        requestMain += "            <c:key>IncidentResolution</c:key>";
        requestMain += "            <c:value i:type=\"a:Entity\">";
        requestMain += "              <a:Attributes>";
        requestMain += "                <a:KeyValuePairOfstringanyType>";
        requestMain += "                  <c:key>incidentid</c:key>";
        requestMain += "                  <c:value i:type=\"a:EntityReference\">";
        requestMain += "                    <a:Id>" + incidentId + "</a:Id>";
        requestMain += "                    <a:LogicalName>incident</a:LogicalName>";
        requestMain += "                    <a:Name i:nil=\"true\" />";
        requestMain += "                  </c:value>";
        requestMain += "                </a:KeyValuePairOfstringanyType>";
        requestMain += "                <a:KeyValuePairOfstringanyType>";
        requestMain += "                  <c:key>subject</c:key>";
        requestMain += "                  <c:value i:type=\"d:string\" xmlns:d=\"http://www.w3.org/2001/XMLSchema\">Parent Case has been resolved</c:value>";
        requestMain += "                </a:KeyValuePairOfstringanyType>";
        requestMain += "              </a:Attributes>";
        requestMain += "              <a:EntityState i:nil=\"true\" />";
        requestMain += "              <a:FormattedValues />";
        requestMain += "              <a:Id>00000000-0000-0000-0000-000000000000</a:Id>";
        requestMain += "              <a:LogicalName>incidentresolution</a:LogicalName>";
        requestMain += "              <a:RelatedEntities />";
        requestMain += "            </c:value>";
        requestMain += "          </a:KeyValuePairOfstringanyType>";
        requestMain += "          <a:KeyValuePairOfstringanyType>";
        requestMain += "            <c:key>Status</c:key>";
        requestMain += "            <c:value i:type=\"a:OptionSetValue\">";
        requestMain += "              <a:Value>5</a:Value>";
        requestMain += "            </c:value>";
        requestMain += "          </a:KeyValuePairOfstringanyType>";
        requestMain += "        </a:Parameters>";
        requestMain += "        <a:RequestId i:nil=\"true\" />";
        requestMain += "        <a:RequestName>CloseIncident</a:RequestName>";
        requestMain += "      </request>";
        requestMain += "    </Execute>";
        requestMain += "  </s:Body>";
        requestMain += "</s:Envelope>";
        var req = new XMLHttpRequest();

var srvURL = SDK.SAMPLES._getServerUrl();
        req.open("POST", srvURL, true)
        // Responses will return XML. It isn't possible to return JSON.
        req.setRequestHeader("Accept", "application/xml, text/xml, */*");
        req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
        var successCallback = null;
        var errorCallback = null;
        req.onreadystatechange = function () { SDK.SAMPLES.CloseIncidentResponse(req, successCallback, errorCallback); };
        req.send(requestMain);
    },
    CloseIncidentResponse: function (req, successCallback, errorCallback) {
        ///<summary>
        /// Recieves the assign response
        ///</summary>
        ///<param name="req" Type="XMLHttpRequest">
        /// The XMLHttpRequest response
        ///</param>
        ///<param name="successCallback" Type="Function">
        /// The function to perform when an successfult response is returned.
        /// For this message no data is returned so a success callback is not really necessary.
        ///</param>
        ///<param name="errorCallback" Type="Function">
        /// The function to perform when an error is returned.
        /// This function accepts a JScript error returned by the _getError function
        ///</param>
        if (req.readyState == 4) {
            if (req.status == 200) {
                if (successCallback != null)
                { successCallback(); }
            }
            else {
                errorCallback(SDK.SAMPLES._getError(req.responseXML));
            }
        }
    },
    _getError: function (faultXml) {
        ///<summary>
        /// Parses the WCF fault returned in the event of an error.
        ///</summary>
        ///<param name="faultXml" Type="XML">
        /// The responseXML property of the XMLHttpRequest response.
        ///</param>
        var errorMessage = "Unknown Error (Unable to parse the fault)";
        if (typeof faultXml == "object") {
            try {
                var bodyNode = faultXml.firstChild.firstChild;
                //Retrieve the fault node
                for (var i = 0; i < bodyNode.childNodes.length; i++) {
                    var node = bodyNode.childNodes[i];
                    //NOTE: This comparison does not handle the case where the XML namespace changes
                    if ("s:Fault" == node.nodeName) {
                        for (var j = 0; j < node.childNodes.length; j++) {
                            var faultStringNode = node.childNodes[j];
                            if ("faultstring" == faultStringNode.nodeName) {
                                errorMessage = faultStringNode.text;
                                break;
                            }
                        }
                        break;
                    }
                }
            }
            catch (e) { };
        }
        return new Error(errorMessage);
    },
    __namespace: true
///////////////////////////////////////////////////////////////////////////////////
//谢谢,改编自:
// http://mileyja.blogspot.com/2011/08/close-case-using-jscript-or-net-in.html
//////////////////////////////////////////////////////////////////////////////////
if(类型(SDK)=“未定义”)
{SDK={uuuu名称空间:true};}
//这将为此库中的函数建立一个更独特的命名空间。这将降低成本
//加载库时,可能由于名称重复而覆盖函数。
SDK.SAMPLES={
_getServerUrl:函数(){
///
///使用表单中可用的上下文信息返回SOAP端点的URL
///或HTML网页资源。
///
var OrgServicePath=“/XRMServices/2011/Organization.svc/web”;
var serverUrl=“”;
if(GetGlobalContext的类型==“函数”){
var context=GetGlobalContext();
serverUrl=context.getServerUrl();
}
否则{
if(typeof Xrm.Page.context==“对象”){
//serverUrl=Xrm.Page.context.getServerUrl();
serverUrl=document.location.protocol+“/”+document.location.host+“/”+Xrm.Page.context.getorganiquename();
}
其他的
{抛出新错误(“无法访问服务器URL”);}
}
if(serverUrl.match(/\/$/)){
serverUrl=serverUrl.substring(0,serverUrl.length-1);
}
返回serverUrl+OrgServicePath;
},
CloseIncidentRequest:函数(){
var incidentId=Xrm.Page.data.entity.getId();
var requestMain=“”
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“意外事件解决”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“incidentid”;
requestMain+=“”;
requestMain+=“”+incidentId+“”;
requestMain+=“事件”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“主题”;
requestMain+=“父案例已解决”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“00000000-0000-0000-0000-000000000000”;
requestMain+=“意外事件解决”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“状态”;
requestMain+=“”;
requestMain+=“5”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“CloseIncident”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
requestMain+=“”;
var req=新的XMLHttpRequest();
var srvURL=SDK.SAMPLES._getServerUrl();
请求打开(“POST”,srvURL,真)
//响应将返回XML。不可能返回JSON。
setRequestHeader(“接受”、“应用程序/xml、文本/xml、*/*”);
请求setRequestHeader(“内容类型”,“文本/xml;字符集=utf-8”);
请求setRequestHeader(“SOAPAction”http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
var successCallback=null;
var errorCallback=null;
req.onreadystatechange=函数(){SDK.SAMPLES.CloseIncidentResponse(req,successCallback,errorCallback);};
请求发送(requestMain);
},
CloseIncidentResponse:函数(req、successCallback、errorCallback){
///
///接收分配响应
///
///
///XMLHttpRequest响应
///
///
///返回成功响应时要执行的函数。
///对于此消息,没有返回任何数据,因此实际上不需要成功回调。
///
///
///返回错误时要执行的函数。
///此函数接受由_getError函数返回的JScript错误
///
如果(req.readyState==4){
如果(请求状态==200){
if(successCallback!=null)
{successCallback();}
}
否则{
errorCallback(SDK.SAMPLES.\u ge