9 个解决方案
#1
实际意思是我只想暴露接口,是否可以实现?
#2
可以分开,我就是分开的,错误得看你是怎么写的,一般正确引用是不可能报错的。
#3
举个例子,下面的代码中typeof中需要的是class,如果我只暴露接口,那服务如何启动?
前提是不引用实现接口的项目。
前提是不引用实现接口的项目。
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test));
#4
附上 config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<services>
<service name="ClassLibrary1.test">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8732/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
<endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
<!--
部署时,应删除或替换下列标识元素,以反映
用来运行所部署服务的标识。删除之后,WCF 将
自动推断相应标识。
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
<!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
#5
不引用实现接口的项目?那你实现接口的项目放着干嘛用?ServiceHost不去引用它的话,就没地方会用到了,难道让客户端去引用?
#6
当你把接口和实现接口的项目分开时,你就可以单独将接口暴露给客户端引用(dll方式引用),这才是分离接口的真正目的,而不是不让服务端看到,服务端启动服务看不到它的实现的话,如何启动?
#7
服务器 肯定是可以访问所有的类的,不能访问的话就相当于没用到,
客户端 接收服务器传来的对象,然后根据接口转化为实际对象来使用的
我也正在学习wcf 呵呵
客户端 接收服务器传来的对象,然后根据接口转化为实际对象来使用的
我也正在学习wcf 呵呵
#8
基本明白了,跟踪那个Service1Client对象,它继承自IService1接口,那就是公开的方法其实是接口中暴露的方法,而非实现类暴露的方法,是这样的吧。
#9
把
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test))
搬到WCF类库
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test))
搬到WCF类库
#1
实际意思是我只想暴露接口,是否可以实现?
#2
可以分开,我就是分开的,错误得看你是怎么写的,一般正确引用是不可能报错的。
#3
举个例子,下面的代码中typeof中需要的是class,如果我只暴露接口,那服务如何启动?
前提是不引用实现接口的项目。
前提是不引用实现接口的项目。
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test));
#4
附上 config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<services>
<service name="ClassLibrary1.test">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8732/" />
</baseAddresses>
</host>
<!-- Service Endpoints -->
<!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
<endpoint address ="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
<!--
部署时,应删除或替换下列标识元素,以反映
用来运行所部署服务的标识。删除之后,WCF 将
自动推断相应标识。
-->
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<!-- Metadata Endpoints -->
<!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
<!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
#5
不引用实现接口的项目?那你实现接口的项目放着干嘛用?ServiceHost不去引用它的话,就没地方会用到了,难道让客户端去引用?
#6
当你把接口和实现接口的项目分开时,你就可以单独将接口暴露给客户端引用(dll方式引用),这才是分离接口的真正目的,而不是不让服务端看到,服务端启动服务看不到它的实现的话,如何启动?
#7
服务器 肯定是可以访问所有的类的,不能访问的话就相当于没用到,
客户端 接收服务器传来的对象,然后根据接口转化为实际对象来使用的
我也正在学习wcf 呵呵
客户端 接收服务器传来的对象,然后根据接口转化为实际对象来使用的
我也正在学习wcf 呵呵
#8
基本明白了,跟踪那个Service1Client对象,它继承自IService1接口,那就是公开的方法其实是接口中暴露的方法,而非实现类暴露的方法,是这样的吧。
#9
把
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test))
搬到WCF类库
ServiceHost _host = new ServiceHost(typeof(ClassLibrary1.test))
搬到WCF类库