缺乏关于这个主题的文档,加上我在所有方面都在努力学习曲线,让我对从哪里开始感到困惑。如果可能的话,我需要使用C#完成这项工作。我为这个问题的模糊性道歉,但我真的迷失了。我希望链接到全面的指南/参考资料。
为了完成这项工作,我遇到了以下问题:
我使用otrs gui创建了一个Web服务,操作CreateTicket,但是通过C#向我选择的命名空间发出的请求返回404(未找到)。当我尝试使用该命名空间添加服务引用或Web引用时,我得到相同的错误。但是,当我将该命名空间作为url插入我的浏览器时,它会显示“customer.pl”。
我是否可以在不在Visual Studio中添加Web服务作为服务参考的情况下发送soap请求?鉴于我之前的问题,我不能这样做。我是否只需构建soap请求字符串并将其写入Web请求的数据流,并将http://domain/rpc.pl
作为uri?
如果上一个问题的答案是肯定的......当尝试下面的代码段时,我在最后一行得到一个内部服务器错误(500)。然而,标题看起来像一个SOAP标题让我感到困惑,因为我不会想到它已经走得那么远了。
var document = new StringBuilder();
document.Append("<UserLogin>some user login</UserLogin>");
document.Append("<Password>some password</Password> ");
document.Append("<Ticket>");
document.Append("<Title>some title</Title> ");
document.Append("<CustomerUser>some customer user login</CustomerUser>");
document.Append("<Queue>some queue</Queue>");
document.Append("<State>some state</State>");
document.Append("<Priority>some priority</Priority>");
document.Append("</Ticket>");
document.Append("<Article>");
document.Append("<Subject>some subject</Subject>");
document.Append("<Body>some body</Body>");
document.Append("<ContentType>text/plain; charset=utf8</ContentType>");
document.Append("</Article>");
//var uri = new Uri("http://domain/injest");
var uri = new Uri("http://domain/rpc.pl");
var httpWebReq = (HttpWebRequest)WebRequest.Create(uri);
var bytePostData = Encoding.UTF8.GetBytes(document.ToString());
httpWebReq.Timeout = 5 * 1000;
httpWebReq.Method = "POST";
httpWebReq.ContentLength = bytePostData.Length;
httpWebReq.ContentType = "text/xml;charset=utf-8";
//httpWebReq.TransferEncoding=
//httpWebReq.ContentType = "application/xml";
//httpWebReq.Accept = "application/xml";
var dataStream = httpWebReq.GetRequestStream();
dataStream.Write(bytePostData, 0, bytePostData.Length);
dataStream.Close();
var httpWebResponse = (HttpWebResponse)httpWebReq.GetResponse();
即使你能提供的只是从哪里开始,我也会知道如何继续,因为我很难过。
答案 0 :(得分:3)
您正在使用rpc.pl
端点,它是“旧”RPC样式接口的一部分。
你提到你通过GUI添加了web服务,这意味着你正在使用'新'通用接口,这确实比.Net更容易。
端点的地址为/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnector
或您在管理部分中称为Web服务的任何内容。