Javascript CRM 2011-443 HTTP/1.1 POST/test/XRMServices/2011/Organization.svc/web 400 2 BadRequest CRMAppPool
我的开发人员CRM内部部署安装中有两个组织。一个是导入的生产数据库,另一个(名为Test)是在dev CRM中新建的。我的javascript SOAP例程在导入的生产组织中工作,在另一个(测试)中失败,出现401拒绝访问错误(在使用Wireshark时可见)。Windows httperr###日志将在本文标题中显示此消息 由于消息似乎表明问题是与crmappool相关的权限,我将该应用程序池(网络服务)的运行方式添加到本地administrators组并重新启动。当我重新运行javascript时,会显示相同的错误消息 我断断续续地琢磨了好几个星期。有什么想法吗?如果这是一个权限问题,是否有一个好方法可以找出谁被拒绝了对什么资源的什么权限(这样我就可以在测试组织中授予适当的权限) 谢谢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
///////////////////////////////////////////////////////////////////////////////////
// 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