4

我创建了一个 wcf 服务,但我使用了 3 个项目;
1)ServiceLibrary(WCF 库)
2)Web
3)ConsoleTestClient
我的ServiceLibraryapp.config 文件如下所示;

  <system.serviceModel>
    <services>
      <service name="MrDAStoreJobs.ServiceLibrary.AdvertisementService">
        <clear />
        <endpoint address="basic" 
                  binding="basicHttpBinding" bindingConfiguration="" 
                  contract="MrDAStoreJobs.ServiceLibrary.Interface.IAdvertisementService" />
        <endpoint name="mexHttpBinding"
          contract="IMetadataExchange"
          binding="mexHttpBinding"
          address="mex" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:13758/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false before deployment -->
          <serviceMetadata httpGetEnabled="True" />
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel> <br />

现在,为了托管这个库,我在我Web.Config的项目文件中完成了以下设置Web
svc 文件名是WcfDataService1.svc

    public class WcfDataService1 : DataService<AdvertisementService>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.UseVerboseErrors = true;
ServiceOperationRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }
    }
  <system.serviceModel>
    <services>
      <service name="MrDAStoreJobs.ServiceLibrary.AdvertisementService">
        <clear />
        <endpoint address="basic" 
                  binding="basicHttpBinding" bindingConfiguration="" 
                  contract="MrDAStoreJobs.ServiceLibrary.Interface.IAdvertisementService" />
        <endpoint name="mexHttpBinding"
          contract="IMetadataExchange"
          binding="mexHttpBinding"
          address="mex" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:13758/WcfDataService1.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, 
          set the value below to false before deployment -->
          <serviceMetadata httpGetEnabled="True" />
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

现在,当我使用 WCF 测试客户端直接使用(ServiceLibrary 项目)测试此服务时,我看到以下内容并且一切正常; 在此处输入图像描述
问题是当我尝试运行我的Web项目(我将其用作 wcf 服务的主机)时。然后转到控制台测试客户端,并希望使用添加引用添加引用。我没有看到我的GetSet方法(如测试客户端) 在此处输入图像描述 为什么我没有看到我的 IAdvertisementService 接口和方法
我必须将它部署到实际的 IIS 吗?

4

2 回答 2

7

要使用 ASP.NET 开发服务,我们必须将 WebService 属性添加到类,并将 WebMethodAttribute 添加到任何类方法。

例子

[WebService] 
 public class Service : System.Web.Services.WebService 
  { 
  [WebMethod] 
  public string Test(string strMsg) 
  { 
      return strMsg; 
  } 
 }

要在 WCF 中开发服务,我们将编写以下代码:

[ServiceContract] 
public interface ITest 
{ 
   [OperationContract] 
   string ShowMessage(string strMsg); 
 } 


public class Service : ITest 
   { 
       public string ShowMessage(string strMsg) 
       { 
          return strMsg; 
       } 
   }

ServiceContractAttribute 指定接口定义WCF 服务契约,OperationContract 属性表示接口的哪些方法定义了服务契约的操作。

实现服务契约的类在 WCF 中称为服务类型。

托管服务

ASP.NET Web 服务被编译成一个类库程序集,一个扩展名为 .asmx 的服务文件将包含该服务的代码。服务文件被复制到 ASP.NET 应用程序的根目录中,而程序集将被复制到 bin 目录中。可以使用服务文件的 URL 访问应用程序。

WCF 服务可以托管在 IIS 或 WindowsActivationService 中。

将服务类型编译成类库 将扩展名为 .SVC 的服务文件复制到虚拟目录中,并将程序集复制到虚拟目录的 bin 子目录中。将 web.config 文件复制到虚拟目录中。

客户开发

ASP.NET Web 服务的客户端是使用命令行工具 WSDL.EXE 生成的。

WCF 使用 ServiceMetadata 工具 (svcutil.exe) 为服务生成客户端。

有关更多详细信息,请访问此链接 http://www.codeproject.com/Articles/139787/What-s-the-Difference-between-WCF-and-Web-Services

于 2013-05-16T12:10:09.183 回答
1

以前的帖子已删除:


更新:

Microsoft 开发人员网络实际上对此进行了非常详细的介绍,他们提供的一些资源是:

还有几本书我解决了这个特殊的问题。由于有人说提供解决此问题的链接并不能真正回答您的问题,因此我将尝试回答。

  1. 在 Visual Studio 中单击File,然后继续New Project
  2. 在对话框中展开Visual C#,选择WebASP.NET Web 窗体应用程序
  3. 给您的项目起一个您选择的名称NorthwindWeb

至此,您已经创建了一个项目;由于服务的复杂性,忽略一个微小的细节可能会导致灾难性的结果。这就是为什么我要从头开始。

在我的示例中,我会将其链接到Database。所以我将添加一个Ado.Net Entity Data Model。我将命名我的模型:NorthwindModel. 我还将根据现有的Database生成。因此,此时只需遵循 Visual Studio 向导即可。在这些表中选择您的数据库对象,然后完成。

重要的部分,构建我的Data Service.

  1. 项目添加新项目
  2. 选择Web并选择WCF 数据服务
  3. 输入名称,NorthwindCustomer- 然后添加

找到第一个Todo:评论并删除代码,然后输入:

public class DemonDbCustomer : DataService<demonDbEntities>

然后在InitializeServiceEvent Handler 中找到注释:

config.SetEntitySetAccessRule("*", EntitySetRights.All);

此时按CTRL + F5运行服务。浏览器将打开并生成服务的 XML 模式。在地址栏中,在 URL 末尾输入客户NorthwindCustomers.svc,然后按 Enter

** 有时 Internet Explorer 会搞砸,因此可能需要额外的故障排除。**

现在我们将创建我们的客户端部分。

  1. 添加项目
  2. 选择Windows 窗体应用程序
  3. 命名您选择的文件,NorthwindClient然后单击Ok
  4. 解决方案资源管理器中选择NorthwindClient Project设置为启动项目
  5. 右键单击项目:添加服务引用单击发现

此时,您的 URLNorthwindCustomers Service将出现在该地址字段中。这是从该.svc文件生成的。

现在我们必须为我们的服务提供数据绑定。

  1. 数据菜单上,我们要显示数据源
  2. 添加新数据源
  3. 选择类型Data Source并遵循向导(单击对象)。
  4. 选择要绑定的对象。

现在,您只需要创建一个User Interface. 为此,只需将您的Customers Node从您Data Sources拖到Form.

  • DataGridView
  • BindingSource
  • BindingNavigation

它们都是自动添加的。然后只需双击您的Form并将以下内容添加到您的Form1_Load Event Handler.

ServiceReference1.northwindModel.northwindEntities proxy = new 
     ServiceReference1.northwindModel.northwindEntities(new
         Uri("http://localhost:53397/NorthwindCustomers.svc/"));

// As you see it pointed to our SVC file, because that includes our Address, Binding, Contract information.

this.customersBindingSource.DataSource = proxy.Customers;

现在在您的解决方案资源管理器中右键单击它NorthwindCustomers.svc,然后单击View In Browser。将添加 XML 模式,因此您只需从地址栏中复制该 URL 。然后将 替换为Uri您刚刚复制的那个。

运行您的应用程序,您已经完成以下操作:

  • 主持人
  • 客户
  • 服务
  • 已消费

这就是如何使用WCF 数据服务的文章,这里有更详细的文章:

希望这会有所帮助。

于 2013-03-06T17:55:55.050 回答