Revit Addin Visual Studio调用SOAP web服务

本文关键字:SOAP web 服务 调用 Studio Addin Visual Revit | 更新日期: 2023-09-27 18:14:46

创建Autodesk Revit插件。我希望它能够与SOAP Web服务对话

插件被创建为一个类库。SOAP客户端代码是通过使用Visual Studio Service Reference并指向wsdl url来生成的。

当我从Revit启动插件时,我得到以下错误

Revit遇到一个系统。InvalidOperationException:无法在ServiceModel客户端配置节中找到名称为"{xxx}"和合同为"{yyy}"的端点元素。

请注意,如果我将Visual Studio项目创建为命令行项目并直接运行它,SOAP调用将正常工作。

注意:我在插件清单中指向的构建文件夹中有一个.config文件。

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<RevitAddIns>
  <AddIn Type="Command">
<Name>AIMRevitTestTwo</Name>
<Assembly>
  C:'Users'greg.bluntzer'Documents'Visual Studio 2015'Projects'AIMRevitTestTwo'AIMRevitTestTwo'bin'Debug'AIMRevitTestTwo.dll
</Assembly>
<AddInId>604b1052-f742-4951-8576-c261d1993109</AddInId>
<FullClassName>App</FullClassName>
<VendorId>xxx</VendorId>
<VendorDescription>yyy</VendorDescription>

是否有其他的东西我需要配置在我的Visual Studio项目或Revit清单,以便它会看。config文件。

更新:我发现了这个链接,说要尝试创建/更新revit.exe.config文件并添加绑定。它解决了我的本地问题。这对我来说不是一个好的解决方案,因为我想分发这个插件。所以我仍然想知道一种方法,使外接程序,使它可以读取配置文件,随类库。

解决方案:根据建议,我在代码 中构建配置信息
         <binding name="findAePReqEByDocumentSoapBinding"  allowCookies="true">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="fmax" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>

变成

BasicHttpBinding binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.AllowCookies = true;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
        binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
        binding.Security.Transport.Realm = "fmax";
        binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
        binding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Default;
        binding.MaxReceivedMessageSize = int.MaxValue;
        binding.MaxBufferSize = int.MaxValue;
        EndpointAddress endPointAddress = new EndpointAddress(DataAccess.END_POINT);

Revit Addin Visual Studio调用SOAP web服务

一般来说,根据我的经验,最好的答案是以编程方式创建绑定,而不是使用配置文件。

如果您查看自动生成的SOAP客户机类的构造函数,它有一个您可能正在使用的无参数构造函数(它从配置中读取)—但是可能还有另一个您在代码中指定地址和绑定的构造函数。走那条路。看看类似BasicHttpBinding类的东西。配置中指定的所有内容都可以在代码中添加到该类中。