我创建了一个wcf服务,但已使用了3个项目;
1)ServiceLibrary(WCF库)
2)网站
3)ConsoleTestClient
我的ServiceLibrary
app.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项目(ServiceLibrary项目)测试该服务时,我将看到以下内容,并且一切正常。
问题是当我尝试运行我的
Web
项目(用作wcf服务的主机)时。然后转到控制台测试客户端,并希望使用添加引用来添加引用。我没有看到我的Get
和Set
方法(例如测试客户端)为什么我看不到我的IAdvertisementService接口和方法
我是否必须将其部署到实际的IIS?
最佳答案
若要使用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应用程序的根目录中,而Assembly将被复制到bin目录中。可使用服务文件的URL访问该应用程序。
WCF服务可以托管在IIS或WindowsActivationService中。
将服务类型编译到类库中
将扩展名为.SVC的服务文件复制到虚拟目录中,并将程序集复制到虚拟目录的bin子目录中。
将web.config文件复制到虚拟目录中。
客户发展
使用命令行工具WSDL.EXE生成ASP.NET Web服务的客户端。
WCF使用ServiceMetadata工具(svcutil.exe)生成服务的客户端。
有关更多详细信息,请转到此链接
http://www.codeproject.com/Articles/139787/What-s-the-Difference-between-WCF-and-Web-Services