0

我一直在做一个项目来连接到我们的时间报告供应商的 SOAP 服务并每周获取一份报告(REST 不提供函数调用来获取所需的报告)。他们只给了我们没有帮助的 WSDL:https ://secure.entertimeonline.com/ta/padnos.wsdl和 https://secure.saashr.com/ta/PADNOS.soap

我已将服务引用添加到我的解决方案并生成了代理类,但每次我尝试获取数据时,都会收到错误消息“响应不是格式良好的 XML。 ”和“根级别的数据无效。行1,位置 1。

这是我第一次尝试使用 Web 服务,但我找不到任何有用的材料。

private void btnGo_Click(object sender, EventArgs e)
{
    // service reference
    // runReportByName
    TSPHoursWorked.ServiceReference1.runReport_ByNameType rptName = new ServiceReference1.runReport_ByNameType();
    rptName.version = 1;
    rptName.reportCategory = "Calculated Time";
    rptName.reportName = "Calculated Time By Entry";
    rptName.reportSavedName = "DailyHoursWorked";
    rptName.outputType = TSPHoursWorked.ServiceReference1.runReport_ByNameTypeOutputType.XML;


    TSPHoursWorked.ServiceReference1.SaaSHRClient soap = new ServiceReference1.SaaSHRClient();
    soap.ClientCredentials.UserName.UserName = "username";
    soap.ClientCredentials.UserName.Password = "password";
    var requestInterceptor = new InspectorBehavior();
    soap.Endpoint.Behaviors.Add(requestInterceptor);
    soap.runReport_ByName(rptName);
    string requestXML = requestInterceptor.LastRequestXML;
    outputText.Text = requestXML;
    string responseXML = requestInterceptor.LastResponseXML;
    outputText.Text += responseXML;
}

public class InspectorBehavior : IEndpointBehavior
{
    public string LastRequestXML
    {
        get
        {
            return myMessageInspector.LastRequestXML;
        }
    }

    public string LastResponseXML
    {
        get
        {
            return myMessageInspector.LastResponseXML;
        }
    }


    private MyMessageInspector myMessageInspector = new MyMessageInspector();
    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
    {

    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {

    }

    public void Validate(ServiceEndpoint endpoint)
    {

    }


    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {
        clientRuntime.MessageInspectors.Add(myMessageInspector);
    }
}

public class MyMessageInspector : IClientMessageInspector
{
    public string LastRequestXML { get; private set; }
    public string LastResponseXML { get; private set; }
    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
    {
        LastResponseXML = reply.ToString();
    }

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
    {
        LastRequestXML = request.ToString();
        return request;
    }
}

我只想帮助连接到他们的 Web 服务,并将报告和批量插入 SQL 服务器。谁能让我走上正确的道路?

编辑

我已经安装了 SoapUI,并且在 soap 操作“Actions”列下没有列出任何 URL:没有肥皂动作

4

1 回答 1

0

问题在于我们的 Kronos 中间人供应商没有任何技术知识。几周后,终于与 Kronos 取得联系,我被告知:

  • 必须在没有单点登录的情况下创建新用户
  • 将主管理员帐户的组/报告/等复制到新帐户
  • 为新帐户添加最高安全权限

然后您将能够调用 RESTful 服务。我希望这对某人有所帮助,因为我们的供应商浪费了我们 2 周的时间

于 2016-06-17T12:53:06.973 回答