请教WCF客户端调用问题

JerryOne 2014-09-29 03:45:26
因项目中涉及的服务较多,所以用了手动添加了wcf服务,以下是引用的配置代码

<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IAudit" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:7353/AuditFlow.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IAudit" contract="AuditFlowService.IAudit"
name="WSHttpBinding_IAudit" />
</client>
</system.serviceModel>


client是程序调试用的,怎样把地址变成IIS上的地址,我试了一下直接把address改成IIS地址程序会报错
怎样实现到客户端改地址呢?
...全文
216 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
JerryOne 2014-10-09
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
[quote=引用 2 楼 china_ggd 的回复:] 我在配置文件中改地址正常没错。 不过我一般自己做配置文件,用代码实现创建binding和endpoint这样比较灵活些。
是这样的! 不过这个配置,不是手工配置文件,而是发布到互联网上自动获取。 例如访问 http://bbs.csdn.net/topics/390898010?enterprise=2124&userid=873 就下载到针对某个产品、某个用户的单独的生产环境服务地址(可能返回的是多个可用url挑选一个反应比较快的)。[/quote] 是的,因为是手工引用,引用的时候就已经包含了对应服务的地址了,即client节点会自动添加该服务的endpoint,程序中会生成一个client类,通过这个类去访问服务的成员和方法。 我到网上看过其他人写的,其中有一个写的就是通过ConfigrationManager来实现,但我引用的服务却没有自动生成service节点,只有client节点,请帮我看一下是哪个环节出了问题。 我的想法是这样: 1.建立了Contract即相应接口IAudit 2.程序中增加了一个Host项目来部署部署svc相关服务,这里指定了端口7573。 这时候会有一个web.config,配置信息如下:

			<service behaviorConfiguration="myServiceBehavior" name="U_ERP.WCFService.Service.AuditFlow">
				<endpoint address="" binding="wsHttpBinding" bindingConfiguration="wshttp"
				 contract="U_ERP.WCFService.Contract.ServiceContract.IAudit" />
			</service>
3.创建了一个服务引用项目,在这个项目中通过添加服务引用来,引用自动加上了7573端口号。且会自动生成一个Client的相关类,可通过这个类直接访问上述服务的方法。生成的app.config如下,自动加上了端口号

<client>
            <endpoint address="http://localhost:7353/AuditFlow.svc" binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_IAudit" contract="AuditFlowService.IAudit"
                name="WSHttpBinding_IAudit" />
</client>
上述过程在本机上编译都不存在问题,如果去别的机器部署,手动改步骤3的client然后编译也可以运行 但这显然很不方便。有什么办法可以在编译时读取步骤3的配置文件信息这样,部署的时候只要更改配置文件就可以了。 或者是不是还有更灵活的办法,感谢您的回复!
JerryOne 2014-10-09
  • 打赏
  • 举报
回复
引用 11 楼 wind_cloud2011 的回复:
http://localhost:7353/AuditFlow.svc,这是你本机调试时的服务,你要发布到IIS相应的目录下,再添加服务引用时,加IIS服务器的IP,通过发现再引用进来,配置文件中的http://localhost:7353就可修改为http://IP
关键问题在这里,如果我去引用IIS服务器的服务,那么IIS地址换了呢?是不是又要重新去引用,重新去编译才能使用。
  • 打赏
  • 举报
回复
引用 2 楼 china_ggd 的回复:
我在配置文件中改地址正常没错。 不过我一般自己做配置文件,用代码实现创建binding和endpoint这样比较灵活些。
是这样的! 不过这个配置,不是手工配置文件,而是发布到互联网上自动获取。 例如访问 http://bbs.csdn.net/topics/390898010?enterprise=2124&userid=873 就下载到针对某个产品、某个用户的单独的生产环境服务地址(可能返回的是多个可用url挑选一个反应比较快的)。
  • 打赏
  • 举报
回复
引用 10 楼 JerryOne 的回复:
服务路径是正确的,每次改配置文件后,重新编译后可以正常执行服务
看到这个,你就知道这个客户端程序设计得有些“业余”了。因为它想到的业务逻辑,只是书本上交给初学者的练习题的那种。
  • 打赏
  • 举报
回复
引用 9 楼 JerryOne 的回复:
据说可以通过代码读取配置文件的service节点来实现,但我这个是客户端掉用,没有service节点。把地址改成iis重新编译倒是没问题,但这样一来就不能实现配置客户端功能了
晕!这是很常见的情况。 首先,正如msdn文档 http://msdn.microsoft.com/zh-cn/library/ms735103(v=vs.110).aspx 所显示的,要调用客户端,可以动态给出与配置文件不同的 remoteAddress 参数。 而服务器地址,不是你调试程序时的地址,是你的客户端程序在启动时应该到你的服务器去取的。也就是说,真正的程序,总应该给出这个 remoteAddress 参数,访问与开发编译时内置在程序中的不一样的参数。这个是客户端的业务逻辑。没有这个业务逻辑设计概念,才会以为总应该读取预编译的地址。
wind_cloud2011 2014-10-01
  • 打赏
  • 举报
回复
http://localhost:7353/AuditFlow.svc,这是你本机调试时的服务,你要发布到IIS相应的目录下,再添加服务引用时,加IIS服务器的IP,通过发现再引用进来,配置文件中的http://localhost:7353就可修改为http://IP
JerryOne 2014-09-30
  • 打赏
  • 举报
回复
服务路径是正确的,每次改配置文件后,重新编译后可以正常执行服务
JerryOne 2014-09-30
  • 打赏
  • 举报
回复
据说可以通过代码读取配置文件的service节点来实现,但我这个是客户端掉用,没有service节点。把地址改成iis重新编译倒是没问题,但这样一来就不能实现配置客户端功能了
JerryOne 2014-09-30
  • 打赏
  • 举报
回复
这个配置的服务和iis的服务都可以正常访问,但编译之后改配置文件的地址就不能访问了
puler 2014-09-30
  • 打赏
  • 举报
回复
认真看看了一下, 认真回复了一下
threenewbee 2014-09-29
  • 打赏
  • 举报
回复
服务器有没有配置好端口和允许防火墙?
sunny906 2014-09-29
  • 打赏
  • 举报
回复
WCF客户端在添加服务引用的时候是自动生成的啊,你把iis上的服务端路径复制到客户端服务引用的地址栏里,然后更新服务引用,看能不能更新成功,如果不能就说明服务端路径不对
wxr52472 2014-09-29
  • 打赏
  • 举报
回复
服务契约里 [ServiceContract(Namespace = "http://xxx.com")] 方法里[ServiceBehavior(Namespace = "http://xxx.com")] f服务端config bindingNamespace=http://xxx.com
E次奥 2014-09-29
  • 打赏
  • 举报
回复
在浏览器访问网WCF服务,然后复制地址
  • 打赏
  • 举报
回复
我在配置文件中改地址正常没错。 不过我一般自己做配置文件,用代码实现创建binding和endpoint这样比较灵活些。
Justin-Liu 2014-09-29
  • 打赏
  • 举报
回复
报什么错? 在客户端试试能不能访问到服务,能访问到就应该没有问题

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧