首页 新闻 搜索 专区 学院

WCF对象传输问题

0
悬赏园豆:10 [已解决问题] 解决于 2010-08-06 17:13

在客户端如何调用在服务器端定义的对象?

就是如何让客户端可以识别服务器端定义的类,比如,想实现这样的功能,服务器端定义的服务(方法)用到了服务器的一个类,是作为参数使用的,我如何在客户端生成相应的对象,并调用该服务?

谢谢!

stewen的主页 stewen | 初学一级 | 园豆:14
提问于:2010-08-06 10:54
< >
分享
最佳答案
1

看一个实例:

新建个会员管理服务:

    [ServiceContract]
    public interface IClientManager
    {
        [OperationContract]
        ClientEntity UpdateClientInfo(ClientEntity entity);
    }
定义个实体:
    [DataContract]
    public class ClientEntity
    {
        [DataMember]
        public string ClientName
        {
            get;
            set;
        }
    }
服务实现:

    public class ClientManagerService : IClientManager
    {
        public ClientEntity UpdateClientInfo(ClientEntity entity)
        {
            entity.ClientName="a";
            return entity;
        }
    }
配置服务:

 <system.serviceModel>
      <services>
          <service name="ClientManagerService">
              <endpoint address="http://localhost:8899/ClientManagerService.svc" binding="basicHttpBinding"
               contract="IClientManagerService" bindingName="ClientManagerEndPoint"></endpoint>
          </service>
      </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
添加引用服务:

客户端调用:
   ClientManagerProxy.ClientManagerClient proxy = new ClientManagerProxy.ClientManagerClient();
   ClientManagerProxy.ClientEntity entity=new ClientManagerProxy.ClientEntity();
   entity.ClientName="newValue";
   proxy.UpdateClientInfo(entity);

总结,在添加引用服务的时候 IDE 会自动构建创建服务代理的一切信息、包括实体,
收获园豆:10
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-08-06 15:42
这个说的非常详细,而且还贴了图片,直观生动,只是我的DataContract属性为什么就不能使用呢?需要加哪些命名空间吗?
stewen | 园豆:14 (初学一级) | 2010-08-06 16:46
引入 System.Runtime.Serialization命名控件。
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-06 17:23
其他回答(1)
0

1,你可以通过svcutil 生成客户端代理类和数据契约;

2,可以通过项目的"添加服务引用",在你的项目中生成客户端代理类和数据契约;

3,通过将服务器的类定义作为DLL或源代码引入到你的客户端项目中;

4,可以通过WSDL,手动编写相应的参数的SOAP格式的XML片断;

Launcher | 园豆:45045 (高人七级) | 2010-08-06 10:59
这几种方法,都试过了,不行,客户端与服务器端无法通信呀,不过还是要谢谢你!
支持(0) 反对(0) stewen | 园豆:14 (初学一级) | 2010-08-06 11:16
你调用的服务是java 的,还是 .net的?
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-08-06 11:35
才看了标题,你用wcf建的服务,你的客户端是.net的吗? 方便的话,可以把服务配置,服务契约贴出来,还有你可以把详细错误信息列出来.
支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2010-08-06 11:41
是.NET的,刚学WCF,还望勿笑,再次感谢对于本问题的关注!
支持(0) 反对(0) stewen | 园豆:14 (初学一级) | 2010-08-06 16:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册