【问题标题】:WCF and namespacesWCF 和命名空间
【发布时间】:2013-06-25 20:10:34
【问题描述】:

我想像这样创建一个测试 WCF 服务:http://www.mywebsite.com/admin/Service1.svc

  1. 我新建一个项目 -> WCF -> WCF 服务应用程序
  2. 我将自动创建的 Service1.svc 和 IService1.vb 包装在“Namespace Admin”中,如下所示:

命名空间管理员

Public Class Service1
    Implements IService1

    Public Sub New()
    End Sub

    Public Function GetData(ByVal value As Integer) As String Implements ...
        Return String.Format("You entered: {0}", value)
    End Function

    ' deleted rest of class
End Class

结束命名空间

但是当我尝试向 Service1.svc 添加服务引用时,我得到了这个错误:

There was an error downloading
'http://localhost:51826/Service1.svc/_vti_bin/ListData.svc/$metadata'.

如果我删除我的“命名空间管理员”并将 Service1.svc 放入“管理员”文件夹,那么它可以完美运行,但我需要构建我的代码,因为这将是一个大型项目。

如何使用“命名空间”而不失败?

【问题讨论】:

标签: vb.net wcf


【解决方案1】:

当您创建“WCF 4.0 服务应用程序”时,它使用 Convention-over-Configuration 策略来配置您的 Web 服务;这些约定之一是将服务的实现放在“默认程序集命名空间”内。解决这个问题;请按照以下步骤操作:

  1. 右键单击 .svc 文件并选择查看标记。这是将 .svc 文件绑定到服务实现的 XML 文件
  2. 更改“服务”属性值以匹配服务实现的正确位置,例如WcfService1.Admin.Service1
  3. 构建程序集。
  4. 测试服务。

【讨论】:

  • 我希望我也可以将您的答案标记为已接受,但 Stackoverflow 只允许一个。谢谢你帮助我!
【解决方案2】:

命名空间和文件夹不相关。您可以拥有任何命名空间并将 svc 放在您想要的任何文件夹中。

VB 提供了一个隐式的根命名空间,默认情况下它就是您的项目名称。您可以看到它 Project > Properties > Application 选项卡。

尽管如此,由于您想添加一个“Admin”命名空间,现在您的类位于二级命名空间 - <yourProjectName>.Admin

这必须反映在您的 svc 文件中 - 您必须将“Admin”添加到 service 属性。

右键单击项目中的 svc 文件,然后选择 > 显示标记。更改ServiceHost 标签的Service 属性。

<%@ ServiceHost Language="VB" Debug="true" Service="<YourProjectName>.Admin.Service1" CodeBehind="Service1.svc.vb" %>

【讨论】:

  • 我已经花了好几个小时试图解决这个问题 - 所以谢谢!我无法表达,我非常感谢你(和其他人)花时间帮助像我这样的初学者。 :)
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多