如何与Kronos API通信?

我有一个Kronos入口点http://kronos../wfc/XmlService我应该可以访问但是当我在浏览器中打开它时,响应是:

   

我该怎么做才能使用网络服务?

顺便说一句,我正在使用C#与服务器通信。

你可以使用浏览器,因为Kronos服务器只支持POST请求,浏览器正在发出GET请求。 原因是因为Kronos需要在主体中使用XML,而POST是最合适的方法。

访问Kronos XML API的方法是将WebRequest设置为您将Method设置为POST的URL,如下所示:

 HttpWebRequest reqFp = (HttpWebRequest)HttpWebRequest.Create(KronosServerUrl); reqFp.Method = "POST"; reqFp.ContentType = "text/xml"; 

请注意ContentType如何也设置为text / xml。

此外,您需要确保在Kronos的function访问配置文件中检查XML API访问权限。

正如Nick指出的那样 , 您可以使用XML POST请求与Kronos API进行通信。

虽然您发送请求的方法可能有所不同,但请求格式和API入口点( wfc/XmlService )应适用于所有语言。


第1章:了解XML API

WFC v5.0开发人员工具包程序员指南 1提供了使用各种语言与Kronos API进行通信的一般指南。 第一章介绍了XML API,它是所有API请求的发送方式。

登录请求

Kronos WFC的标​​准XML登录请求。 必须先在任何其他请求之前发送。

    

样品回复:

     

注销请求

此注销请求将结束您的活动Kronos会话。

    

支付期间总请求

此请求加载2017年10月20日至2017年10月27日期间员工12345的支付期总计。

             

第2章:使用XML API

本章介绍了有关如何向Kronos发送XML请求的特定于语言的示例。 它包括JavaVisual Basic的示例。 ( 对于Python,请参阅kronos-wfc-login.py

请注意,这些示例相当简单。 我建议您查看一个更新的XML或HTTP请求库,该库特定于您使用的任何语言。

基于Java的实现 2

使用Java语言有八个步骤:

  1. 使用以下URL字符串打开与服务器的HTTP连接:

     URL url = new URL("http://localhost/wfc/XmlService"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 

    请记住将http://localhost替换为服务器的URL

  2. 通过将HTTP方法设置为“POST”并将内容类型设置为“text / xml”来配置连接,如下所示:

     conn.setRequestMethod("POST"); conn.setRequestProperty("Content-type", "text/xml"); 

    您建立的HTTP连接用于输入(发送XML )和输出(读取XML )。 您还必须确保任何代理服务器或中间网关不会尝试缓存

     conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); 
  3. 设置连接的cookie。 最初,在第一次连接到服务器时,cookie集将为空。 但是,Logon 将返回一组必须保存并在后续HTTP请求中发回的cookie。

     Vector cookies = new Vector(); … //set the cookie values - if available for (int i=0; i  
  4. 将XML文本写为HTTP请求的一部分。

     String xml_send = " … " PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); out.println(xml_send); out.close(); 
  5. 连接到服务器。

     conn.connect(); 
  6. 从服务器打开响应。

     InputStream is = conn.getInputStream(); 
  7. 阅读回复。 来自服务器的HTTP响应将包含XML API响应。 对于Logon请求,字符串xml_recv包含响应。

     int size = conn.getContentLength(); byte[] dataBytes = new byte[size]; int bytesRead = 0; int pos = 0; //read stream into byte array while ( (bytesRead >= 0) && (pos < size)) { if ((bytesRead = is.read(dataBytes, pos, size-pos)) >= 0) { pos = pos + bytesRead; } } String xml_recv = new String(dataBytes, 0, size); is.close(); 
  8. 从响应中读取cookie并将其存储以用于后续HTTP请求。

     int j = 1;// while (true) { String key = conn.getHeaderFieldKey(j); if (key==null) break; else if (key.equals("Set-Cookie")) { String value = conn.getHeaderField(j); cookies.addElement(value); } j++; } 

Visual Basic实现

在本节中,最后一节中用Java实现的相同基本步骤是在Visual Basic中实现的。 此比较显示Visual Basic通过内部管理cookie和大部分HTTP连接处理简化了过程。

以下Inet1 COM object处理HTTP请求的调用,如下所示:

 Dim sPost As String Dim sAction As String Dim sXMLData As String Dim sHTTPHeaders As String sPost = "POST" sAction = "http://localhost/wfc/XmlService" sXMLData = " " sHTTPHeaders = "Content-type: text/xml" ' Inet1 object is an instance ' of the msinet.ocx control ' placed on the current form Inet1.Execute sAction, sPost, sXMLData, sHTTPHeaders 

有用的资源

  • WFC v5.0开发人员工具包程序员指南
  • Kronos产品的文档和服务包 ( 需要登录
  • WFC-API.js - 用于将XML请求发送到WFC API的JavaScript
  • TimeCardView - Kronos API的开源Web UI
  • Kronos社区论坛

脚注:

1引用的文档最初是为Kronos WFC 5.0(API 1.0)编写的。 虽然最高6.3的版本应该使用相同的API,但我无法保证其他版本的准确性。 (请参阅XML API版本6.3到8.0升级 )
2下面的代码示例来自2004年。使用HTTP库可以大大简化Java实现。

不仅是XML Access,而且用户还必须启用远程api访问