在 SiteMinder 受保护站点上公开 WCF 元数据

发布于 2024-11-27 00:14:46 字数 213 浏览 0 评论 0原文

这可能是一个非常愚蠢的问题,但我一直无法找到解决方案。 我在使用 SiteMinder 身份验证的站点上托管了一个 WCF 服务。身份验证依赖于客户端请求中的 cookie。问题是,当我尝试使用 svcutil 生成代理类时,操作失败,因为当 svcutill 尝试获取元数据时,它显然没有将 SiteMinder cookie 添加到其请求中因此我想知道是否有一种简单的方法以编程方式生成 WCF 服务代理类。

This might be a really stupid question, but I've been unable to figure out a solution.
I have a WCF service hosted on a site that uses SiteMinder authentication. The authentication relies on a cookie in the client request.The problem is that when I try to generate a proxy class using svcutil, the operation fails because when svcutill tries to get the metadata, it obviously doesn't add the SiteMinder cookie to its request.I was therefore wondering if there was a simple way to generate the WCF service proxy class programatically.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼角的笑意。 2024-12-04 00:14:46

如果您有权访问已编译的服务 DLL 文件,则可以使用 SvcUtil 命令行实用程序 为数据契约生成 WSDL 和关联的 XSD。此方法的主要问题是您需要在 schemaLocation 属性值的每个 xsd:import 元素中添加由 SvcUtil 生成的 XSD 文件的名称。

以下是修改后的 xsd:import 元素的示例。对于“http://tempuri.org/”命名空间,我添加了 schemaLocation 属性,其值为“tempuri .org.xsd”,让“添加服务引用”进程知道在与 WSDL 文件相同的文件夹中查找该文件。如果您的 WSDL 使用 wsdl:import,请添加位置属性而不是 schemaLocation 属性。此相关问题和解答< /a> 应该有一个好的开始。

  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import namespace="http://tempuri.org/" schemaLocation="tempuri.org.xsd" />
      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" />
    </xsd:schema>
  </wsdl:types>

编辑:

使用编译的服务 DLL 生成客户端代码需要两步过程。 SvcUtil 需要服务 WSDL 来生成客户端。它不能直接使用编译后的DLL。

首先使用包含 ServiceContract 的 DLL 生成 WSDL。我认为如果服务合约 DLL 也位于同一文件夹中,您可以使用服务实现文件。

cd "\Path\To\Your\Service\DLLs"
svcutil YourService.DLL

这将根据您的服务结构创建多个文件。将有一个 .WSDL 文件和多个 .XSD 文件。如上所示编辑这些文件。

最后,使用 Visual Studio 添加服务引用对话框选择已编辑的 .WSDL 文件(只需输入完整路径和文件名)以生成客户端代码,或者使用 SvcUtil,如下所示:

svcutil *.wsdl *.xsd /language:C#

If you have access to the compiled service DLL file, you can use the SvcUtil command line utility to generate the WSDL and associated XSDs for the data contracts. The main wrinkle with this approach is you'll need to add the name of the XSD file generated by SvcUtil in each xsd:import element in the schemaLocation attribute value.

Below are samples of modified xsd:import elements. For the "http://tempuri.org/" namespace, I added the schemaLocation attribute with the value of "tempuri.org.xsd" to let the Add Service Reference process know to look for that file in the same folder as the WSDL file. If your WSDL uses wsdl:import instead, add a location attribute instead of a schemaLocation attribute. This related question and answer should give a good start.

  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import namespace="http://tempuri.org/" schemaLocation="tempuri.org.xsd" />
      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" />
    </xsd:schema>
  </wsdl:types>

EDIT:

Generating the client code using the compiled service DLL requires a two step process. SvcUtil needs the service WSDL to generate the client. It cannot directly use the compiled DLL.

First generate the WSDL using the DLL that contains the ServiceContract. I think you can use the service implementation file if the service contract DLL is also in the same folder.

cd "\Path\To\Your\Service\DLLs"
svcutil YourService.DLL

This will create several files depending on your service structure. There'll be one .WSDL file and several .XSD files. Edit these files as shown above.

Lastly, either use the Visual Studio Add Service Reference dialog to select the edited .WSDL file (just enter the full path and file name) to generate the client code or use SvcUtil as follows:

svcutil *.wsdl *.xsd /language:C#
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文