使用SOAP Web服务(Kronos SaasHR)并将响应保存到SQL服务器中

问题描述:

我一直在研究一个项目,以连接到我们的时间报告供应商的SOAP服务并每周获取一个报告(REST不提供获取期望的报告)。他们只给了我们已没有帮助的WSDL:https://secure.entertimeonline.com/ta/padnos.wsdlhttps://secure.saashr.com/ta/PADNOS.soap使用SOAP Web服务(Kronos SaasHR)并将响应保存到SQL服务器中

我已经加入了服务引用我的解决方案和生成的代理类,但每次我尝试的时间来获取数据,我得到的错误说法“没有很好地形成响应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,也没有肥皂操作中列出的网址“操作”列:no soap actions

的问题是我们的中间人供应商克罗诺斯没有任何技术知识。几周后,终于在与克罗诺斯取得联系,我获悉:

  • 新用户必须在没有单独创建登录
  • 复制组/报告/等主要管理的考虑到新帐户
  • 加最高安全权限的新帐户

然后,你将能够调用REST式服务。我希望这可以帮助别人,因为我们的供应商浪费了我们时间的2周