如何在启用COM互操作的DLL中引用WCF服务?

松果体

问题摘要:我有一个启用了COM互操作/可见的C#DLL。此C#DLL具有对WCF服务的服务引用。当我用C#代码实例化WCF服务时,COM互操作返回错误HRESULT(0x80131509)。

问题详细信息
解决方案中包含三个组件。第一个是非托管的C ++应用程序。此C ++应用程序需要与WCF服务进行通信。我决定采用的方法是在C ++应用程序和WCF服务之间建立一个C#中间层。C#层将启用/启用COM互操作,以便C ++应用程序可以调用它,并且C#代码将处理与WCF服务的对话。C ++方面永远不需要了解WCF服务。就其而言,COM互操作调用将是一个黑匣子。

当我尝试在C#代码中实例化WCF服务客户端时,就会出现问题。为了方便测试,我在C#DLL中做了一个Test()方法。调用Test()只会返回一个硬编码的测试字符串。这行得通。我能够启动C ++应用程序,该应用程序通过COM互操作调用C#DLL,并返回测试字符串。HRESULT是S_OK。现在,如果我加入了改变test()方法的单线条,简单地实例化WCF客户端时,COM互操作调用现在返回的0x80131509的HRESULT。

我唯一的线索是,当我编译C#DLL时,会收到以下警告:

警告:类型库导出程序警告处理为“ [我的WCF服务]”。警告:类型库导出程序遇到的类型是从通用类派生的,并且未标记为[ClassInterface(ClassInterfaceType.None)]。对于此类类型,不能公开类接口。考虑使用[ClassInterface(ClassInterfaceType.None)]标记类型,并使用ComDefaultInterface属性将显式接口公开为COM的默认接口。

我不知道为什么它会警告我有关导出WCF服务类型的信息。我希望通过使用C#中间层,可以将WCF服务与C ++应用程序隔离。

那么在COM启用/可见的DLL中使用WCF服务的窍门是什么?

松果体

经过几天的痛苦之后,找到了一个解决方案,尽管感觉比实际解决方案更像是一种变通方法。

当我意识到尝试在C#代码中实例化WCF服务时,引发了异常,从而找到了一个线索。在C ++方面捕获了异常(确切地说CAtlException)并查看了HRESULT代码之后,我确定C ++程序正在抱怨,因为它找不到WCF服务绑定。等一下 有点不可思议,我创建了一个.exe.config文件,并将其放在可执行文件所在的目录中。.exe.config文件基本上包含WCF服务项目中app.config的内容,此外client,该system.serviceModel节中还包含一个附加标签,其中包含endpoint指向WCF服务地址的单个标签。一切正常,一切就绪。

不过,这对我来说似乎是错误的。为什么C ++程序需要知道这一点?仅从逻辑上考虑,C#COM互操作性应将这些知识分开并作为障碍,完全封装WCF层。通过强制C ++程序了解底层结构,它破坏了封装,并使所有内容变得更加……不明显。我完全可能不知道COM互操作的混乱内部如何工作,所以也许对某人来说这一切都是有意义的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在WCF服务中启用HTTPS

来自分类Dev

WCF互操作性启用Kerberos SPNego的Web服务

来自分类Dev

如何在WCF RESTful服务上启用HTTPS?

来自分类Dev

如何在 beaglebone black 中启用服务?

来自分类Dev

如何在Visual Studio 2012中创建HelloWorld COM互操作

来自分类Dev

如何使Web App引用存储在Azure中的WCF服务?

来自分类Dev

如何配置另一个WCF服务库中引用的WCF服务的URL

来自分类Dev

如何在Blazor服务器端的不同组件中调用javascript互操作方法

来自分类Dev

如何在Windows 10中启用服务器服务?

来自分类Dev

如何在不更改后绑定的情况下从WCF服务引用WCF客户端?

来自分类Dev

如何在WCF服务中安排和展示服务?

来自分类Dev

如何在不使用VS的情况下从Dynamics AX中的c#项目刷新wcf服务引用

来自分类Dev

如何在Firefox中启用类型转换操作?

来自分类Dev

如何在Wildfly中启用远程管理操作

来自分类Dev

如何在 RShiny 中启用和禁用操作按钮

来自分类Dev

在 DLL 中实现的 C# WCF 服务

来自分类常见问题

如何在systemd服务单元中启用virtualenv?

来自分类Dev

如何在SharePoint 2013中启用InfoPath服务?

来自分类Dev

如何在.NET中启用或禁用Windows服务?

来自分类Dev

如何在Swift中为WKWebView启用位置服务?

来自分类Dev

如何在PUMA服务器中启用GZIP

来自分类Dev

如何在SharePoint 2013中启用InfoPath服务?

来自分类Dev

如何在Intellij Idea 12中启用RESTful Web服务?

来自分类Dev

如何在Nixos的Apache服务配置中启用PHP?

来自分类Dev

如何在 Telerik Reporting CORS REST 服务中启用 SSL

来自分类Dev

如何在 PCF 中启用 Nfs 卷服务

来自分类Dev

WCF服务启用跟踪

来自分类Dev

如何在VS 2013中公开托管WCF服务

来自分类Dev

如何在服务响应中显示WCF HTTP代码

Related 相关文章

  1. 1

    如何在WCF服务中启用HTTPS

  2. 2

    WCF互操作性启用Kerberos SPNego的Web服务

  3. 3

    如何在WCF RESTful服务上启用HTTPS?

  4. 4

    如何在 beaglebone black 中启用服务?

  5. 5

    如何在Visual Studio 2012中创建HelloWorld COM互操作

  6. 6

    如何使Web App引用存储在Azure中的WCF服务?

  7. 7

    如何配置另一个WCF服务库中引用的WCF服务的URL

  8. 8

    如何在Blazor服务器端的不同组件中调用javascript互操作方法

  9. 9

    如何在Windows 10中启用服务器服务?

  10. 10

    如何在不更改后绑定的情况下从WCF服务引用WCF客户端?

  11. 11

    如何在WCF服务中安排和展示服务?

  12. 12

    如何在不使用VS的情况下从Dynamics AX中的c#项目刷新wcf服务引用

  13. 13

    如何在Firefox中启用类型转换操作?

  14. 14

    如何在Wildfly中启用远程管理操作

  15. 15

    如何在 RShiny 中启用和禁用操作按钮

  16. 16

    在 DLL 中实现的 C# WCF 服务

  17. 17

    如何在systemd服务单元中启用virtualenv?

  18. 18

    如何在SharePoint 2013中启用InfoPath服务?

  19. 19

    如何在.NET中启用或禁用Windows服务?

  20. 20

    如何在Swift中为WKWebView启用位置服务?

  21. 21

    如何在PUMA服务器中启用GZIP

  22. 22

    如何在SharePoint 2013中启用InfoPath服务?

  23. 23

    如何在Intellij Idea 12中启用RESTful Web服务?

  24. 24

    如何在Nixos的Apache服务配置中启用PHP?

  25. 25

    如何在 Telerik Reporting CORS REST 服务中启用 SSL

  26. 26

    如何在 PCF 中启用 Nfs 卷服务

  27. 27

    WCF服务启用跟踪

  28. 28

    如何在VS 2013中公开托管WCF服务

  29. 29

    如何在服务响应中显示WCF HTTP代码

热门标签

归档