0

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

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

命名空间管理员

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 放入“管理员”文件夹,那么它可以完美运行,但我需要构建我的代码,因为这将是一个大型项目。

如何在不失败的情况下使用“命名空间”?

4

2 回答 2

1

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

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

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

VB 提供了一个隐式的根命名空间,默认情况下它是您的项目名称。您可以看到它项目 > 属性 > 应用程序选项卡。

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

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

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

<%@ ServiceHost Language="VB" Debug="true" Service="<YourProjectName>.Admin.Service1" CodeBehind="Service1.svc.vb" %>
于 2013-06-28T06:32:43.260 回答