使用.Net调用Service Now Web服务

3

我正在尝试从.Net调用Service Now的webservice,我可以成功地插入记录,但是我无法使任何GET请求工作。以下是我的可行的INSERT代码:

public void insertTable(string tableName, string schema, string columnInfo, string shortDesrcipt, string longDescript)
{
    using (ServiceNow_u_database_table tableReference = new ServiceNow_u_database_table())
    {
        insertResponse response = new insertResponse();

        System.Net.ICredentials cred = new System.Net.NetworkCredential(Properties.Settings.Default.UserName, Properties.Settings.Default.Password);
        tableReference.Credentials = cred;

        insert tableInsert = this.getTableData(tableName, schema, columnInfo, shortDesrcipt, longDescript);
        try
        {
            response = tableReference.insert(tableInsert);
        }
        catch (Exception error)
        {
            Console.WriteLine(error.Message);
        }
    }
}

那个可以正常工作。以下是不能用于 GET 的代码:

using (ServiceNow_u_database_table tableReference = new ServiceNow_u_database_table())
{
    ServiceNowExport.com.servicenow.libertydev.u_database_table.getRecords recordGet = new getRecords();
    System.Net.ICredentials cred = new System.Net.NetworkCredential(Properties.Settings.Default.UserName, Properties.Settings.Default.Password);
    tableReference.Credentials = cred;

    recordGet.name = this._tablePrefix + tableName;
    getRecordsResponseGetRecordsResult[] response = tableReference.getRecords(recordGet);
    if (response != null && response.Count() > 0)
    {
        return true;
    }
}

当我运行该代码时,response始终为null。 我正在遵循页面上的指示。
我知道它正在连接,因为如果我删除凭据行,我会得到未经授权的错误。有任何想法吗?谢谢!

2
您提供的“Get”代码片段似乎不完整。这里返回的是true而不是response,这可能是原因吗? - Hari Pachuveetil
在进入 true 分支之前,if 语句会检查响应是否存在。该响应应包含它所找到的表格(我知道表格已经创建好了,用于此测试)。返回 true 表示已找到表格,但目前还没有使用,因为我还没有成功获取响应。 - VydorScope
2个回答

8

以下内容来自ServiceNow关于C# Web Services的维基:这里

如果您在客户端代码中从Web服务中接收到“null”响应,则可能错过了本教程中设置elementFormDefault属性为“False”的步骤...请记得在更改此属性并保存后重新编译您的代码。

该属性可以在ServiceNow实例的System Properties > Web Services中找到。将其设置为false,您就不再会从getRecords响应中收到null。

下面是该属性的屏幕截图: Screenshot of the image


这应该被接受为答案!非常有帮助。 - makim
+1 太棒了,我希望我三个小时前就看到了 :/ - Icarus
在发布问题之前,我已经尝试过这个答案,但它对我没有用。最终,我决定自己从头开始构建SOAP接口和类,并完全忽略了他们的WSDL。这是唯一让它正常工作的方法。我成功实现了完整的CRUD操作,但我已经离开了那家公司,代码也留给了他们。据我所知,他们今天仍在使用那段代码。 - VydorScope

0

如果您有兴趣,我已经编写了一组SOAP类,可以将一些信息放入servicenow中或从中获取它们。目前它的功能还很有限,仅限于我需要在工作中完成的操作,但对于任何人都应该是有效的。

https://github.com/jeffpatton1971/mod-ServiceNOW

随意查看


谢谢 - 但由于这个问题已经三年了,我已经忘记了它。我最终自己从头开始构建了自己的SOAP接口和类,并完全忽略了他们的WSDL。这是唯一让它正常工作的方法。我已经实现了完整的CRUD操作,但我不再在那家公司工作,留下了这些代码。据我所知,他们今天仍在使用那些代码。 - VydorScope
@VydorScope,您能否分享一下您的代码?您有Github个人资料吗?我想向您学习经验,非常感谢。 - akira
@Akira 抱歉,我已经离开那家公司多年了,不再拥有那段代码的访问权限,也不再从事 .NET 相关工作。我怀疑我 8 年前提出的解决方案现在是否仍然有效。你最好找一位更加熟悉 .NET 的专业人士寻求帮助。抱歉。 - VydorScope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接