找不到引用合同的默认端点元素:通过 Powershell cmdlet 连接到 WCF 端点

Posted

技术标签:

【中文标题】找不到引用合同的默认端点元素:通过 Powershell cmdlet 连接到 WCF 端点【英文标题】:Could not find default endpoint element that references contract :connect to WCF endpoint through Powershell cmdlet 【发布时间】:2012-07-19 03:42:27 【问题描述】:

我创建了一个应连接到我托管的 WCF 端点项目的类库。 客户端项目定义了应与服务交互的命令行开关。

但是,我不断收到以下错误:

     Could not find default endpoint element that references contract Service1.MyService in the
 ServiceModel client configuration section. This might be because no configuration file was found
 for your application, or because no endpoint element matching this contract could be found in the
 client element.

你知道问题可能是什么吗?

编辑 我拥有的是一个定义 cmdlet 的类库。我使用 .psd1 文件导入使用生成的 dll 文件的 Import-Module。

EDIT2 再一次,我没有引用我的库的项目。调用定义的命令行开关的是 powershell,这些 cmdlet 应该连接到 WCF 端点

谢谢

【问题讨论】:

旧帖子,但我也发现了对这个错误的观察。如果您有 2 个程序集,其中一个程序集调用具有服务引用的另一个程序集中的方法,而另一个程序集是启动程序集,则您的服务配置也需要在启动程序集中。 【参考方案1】:

在启动项目中创建带有端点的配置文件

【讨论】:

什么是启动项目。我所拥有的只是一个定义 cmdlet 并且是一个类库的项目。我使用 psd1 文件为 cmdlet 导入模块 他的意思是使用该库的项目应该有一个包含端点的配置文件。不是图书馆本身。 我明白,但 powershell 是调用我的库而不是另一个项目的原因【参考方案2】:

当您在 cmdlet 程序集中运行代码时,执行进程是 powershell.exe(在 %windir%\system32\WindowsPowershell\v1.0 或 %windir%\syswow64\WindowsPowershell\v1.0 中),所以任何 System.ServiceModel 配置都需要在 powershell 配置文件 (powershell.exe.config) 中定义。

我猜这可能不是一个实用的选项,因此您可能需要手动配置服务客户端或通道工厂,而不是通过应用程序配置文件。

查看示例:http://msdn.microsoft.com/en-us/library/ms734681.aspx

另一种选择可能是使用激活配置文件:http://msdn.microsoft.com/en-us/library/ff361644.aspx

我不确定这对服务配置元素的效果如何。

【讨论】:

我会调查的。除了更改 powershell exe 配置之外,这是唯一的方法吗? 据我所知,除了应用程序配置文件之外,没有办法从任何地方加载配置部分,在你的情况下,应用程序是 powershell。【参考方案3】:

让这个工作:这是一个干净的解决方案:

internal static class ServiceClass


    internal static Object GetWCFSvc(string siteUrl)
    

        Uri serviceUri = new Uri(siteUrl);
        EndpointAddress endpointAddress = new EndpointAddress(serviceUri);

        //Create the binding here
        Binding binding = BindingFactory.CreateInstance();

        ServiceClient client = new ServiceClient(binding, endpointAddress);            
        return client;
    




internal static class BindingFactory

    internal static Binding CreateInstance()
    
        BasicHttpBinding binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
        binding.UseDefaultWebProxy = true;
        return binding;
    


【讨论】:

谢谢,对我帮助很大

以上是关于找不到引用合同的默认端点元素:通过 Powershell cmdlet 连接到 WCF 端点的主要内容,如果未能解决你的问题,请参考以下文章

找不到引用合同的默认端点元素 - 托管 wcf

WCF 错误 - 找不到引用合同“UserService.UserService”的默认端点元素

找不到端点异常 - WCF Web 服务

找不到端点异常 - WCF Web 服务

找不到默认端点元素 .NET 4.0

WCF 找不到默认端点