WCF - WSDL或预编译的代理

时间:2009-09-14 18:17:05

标签: wcf

这是B2B场景,一个客户端(至少目前为止)。

服务器环境: WCF服务,IIS6,.NET v3.5

客户环境: 开发商店是.NET 2.0 / VS2005。将调用我的WCF服务。

问题:我应该 (a)为客户开放WSDL gen(出于安全原因不可取)
(b)向客户发送WSDL文件
(c)将代理预编译到dll(在我这边)并发送给客户端
(d)??? ?

关于这种情况的最佳做法,任何利弊的任何建议?

提前致谢,
伊戈尔

3 个答案:

答案 0 :(得分:3)

为安全起见,为什么不公开提供WSDL?

我可能愿意承认,发布一个API(基本上就是你用WSDL做的事情)会让你的比你没有更容易受到攻击,但是它会错假设隐藏WSDL构成任何类型的安全性。具有讽刺意味的是,默默无闻的安全被任何坚定的攻击者打破。

Web服务本身应该是安全的。 WCF提供了许多安全功能,但这与您的问题垂直。

我更喜欢发布WSDL。如果您不想这样做,或者有适当的策略表明您不能这样做,那么将WSDL发送给客户团队,以便他们可以按照自己的意愿使用它。

预编译代理只会在客户端团队中强制执行您的编码约定,并且他们可能不会理解 - 例如,我经常更喜欢使用/ i开关生成代理,使生成的类内部。我还希望能够指定.NET命名空间,以便它们适合我的其余代码。如果我有一个预编译的程序集,那是不可能的(无论如何我都可以使用它,但它会让我烦恼)。

答案 1 :(得分:0)

如果您不想实际发布WSDL并使其在线可用于调用客户端,那么我更希望“向我发送WSDL和XSD”方法。

这样,您仍然可以让客户给您打电话,让他​​们能够以他们认为合适的方式创建代理。

如果主叫方不能或不愿意自己创建代理,我只会考虑在程序集中使用预编译代理,并且只有当他们要求我以汇编形式提供该代码时才会使用。

马克

答案 2 :(得分:0)

按照优先顺序,我倾向于:

  1. 让服务公开WSDL(启用安全性)
  2. 将WSDL文件发送给服务使用者
  3. 我打算将选项3列为发送代理DLL,但第二次认为我甚至不会将其列为选项。在我看来,运送你的客户端代理DLL打开了一大堆蠕虫,我不想处理。

    主要问题是您最终必须支持在客户端站点部署的可执行代码。代理代码可以由svcutil生成,但是如果调用服务存在某种问题,我可以看到客户端调用您的支持并告诉您代理无法正常工作。现在,他们的说法可能不正确,但你很难证明它,因为你不知道他们在做什么。 e.g。

    • 也许他们没有安装代理DLL?
    • 也许有一些许可问题?
    • 也许他们不知道他们在做什么(是的,我知道永远不会发生。:))。
    • 他们这边的.NET升级可能会影响您的代理吗?
    • 发送新代理时,您甚至可能会遇到一些版本问题。

    如果您的客户不是那么精明而不是通过创建代理DLL来帮助他们,那么花些时间和精力来帮助他们获得正确的配置和服务使用是一种更好的方法吗?