我正在制作一个应用程序来自动调用webservice函数的过程。 它是第一次工作并完成我称之为成功的第一个功能,但在接下来的电话中说:
InternalServerError
我的示例代码如下:
soapRequest = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement(ns + "Envelope",
new XAttribute(XNamespace.Xmlns + "soapenv", ns),
new XAttribute(XNamespace.Xmlns + prefijoText, myns),
new XElement(ns + "Header"),
new XElement(ns + "Body",
new XElement(myns + nombreFuncionText,
new XElement(myns + parametroAEnviar, parametroFuncText))
)
));
此代码构建了我必须以正确格式发送到Web服务的xml。 但它只适用于第一次迭代,第一次调用和下一次调用显示我之前评论过的InternalServerError。
另外,如果需要,我将下面的代码通过HttpClient调用Web服务:
try
{
using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
// Se pasa la url del servicio web en la request
var request = new HttpRequestMessage() { RequestUri = new Uri(urlBBDDText), Method = HttpMethod.Post };
request.Content = new StringContent(soapRequest.ToString(), Encoding.UTF8, "text/xml");
request.Headers.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));
request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
request.Headers.Add("SOAPAction", soapActionText);
// Nombre de usuario y contraseña se le pasan al httpclient codificados. Opciones: Basic, NTLM, Digest
var credentials = Encoding.ASCII.GetBytes(usuarioText + ":" + passText);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(credentials));
HttpResponseMessage response = client.SendAsync(request).Result;
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
}
}
}
当我进入活动视图以查看发生了什么时,它会向我显示此消息:
服务Prueba中方法FuncionParam中的参数parametro1为null!
它表示 parametro1 为空,但是当我构建要发送的xml时,parametro1有值:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:pru="urn:microsoft-dynamics-schemas/codeunit/Prueba:FuncionParam">
<soapenv:Header />
<soapenv:Body>
<pru:FuncionParam>
<pru:parametro1>WSTEST06</pru:parametro1>
</pru:FuncionParam>
</soapenv:Body>
</soapenv:Envelope>
请注意,parametro1包含WSTEST06作为值,事件查看器如何表示为null?如何修复调用Web服务的InternalServerError? 任何帮助将非常感激:)
编辑:好的,它有效!我修复了它,我手工制作的xml与SOAP请求接受的相同,并且多次给我InternalServerError。
供您参考:SOAP请求接受此示例xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pru="urn:microsoft-dynamics-schemas/codeunit/Prueba">
<soapenv:Header/>
<soapenv:Body>
<pru:FuncionParam>
<pru:parametro1>ValueOfParameter</pru:parametro1>
</pru:FuncionParam>
</soapenv:Body>
</soapenv:Envelope>
我传递了错误的xml格式,如下所示:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pru="urn:microsoft-dynamics-schemas/codeunit/Prueba:FuncionParam">
<soapenv:Header/>
<soapenv:Body>
<pru:FuncionParam>
<pru:parametro1>?</pru:parametro1>
</pru:FuncionParam>
</soapenv:Body>
</soapenv:Envelope>
的xmlns:PRU =&#34;瓮:微软动力学-模式/ codeunit / Prueba:FuncionParam&#34;
有问题,在&#34; Prueba&#34;之后,骨灰盒是不正确的。是我调用的函数的名称和正确的字符串是直到&#34; Prueba&#34;字。