WCF浅尝
时间:2022-05-03
本文章向大家介绍WCF浅尝,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.首先先建立一个WCF服务应用程序
2.再建立一个宿主程序,这里用控制台,添加服务引用,这里会报错:
点击页面确定,回到添加服务页面
点击箭头有如下内容:
这里告诉我们问题的所在,我们只要重新生成解决方案就行了。
好,重新生成解决方案,ok,问题解决,添加引用服务成功。
3.在控制台程序里启动服务:
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(WcfService2.Service1)))
{
host.Opened += (a, b) => { Console.WriteLine("service is opened"); };
host.Open();
Console.Read();
}
}
这里先把控制台程序设为启动项目
4.运行程序,报错:“服务“WcfService1.Service1”有零个应用程序(非基础结构)终结点。这可能是因为未找到应用程序的配置文件,或者在配置文件中未找到与服务名称匹配的服务元素,或者服务元素中未定义终结点”。
这个问题是宿主的配置文件出现问题,如果宿主是控制台,请修改app.config 配置:代码如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<services>
<service name="WcfService2.Service1" behaviorConfiguration="MessageBehavior" >
<host>
<baseAddresses >
<add baseAddress="http://localhost:13563/WcfService2"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="WcfService2.IService1"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MessageBehavior">
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
5.好问题解决,但是又出现新的问题:HTTP 无法注册 URL http://+:13563/WcfService2/。进程不具有此命名空间的访问权限(有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=70353)。
这个问题主要是win7或者win8系统权限问题,点击vs启动程序,右键点“以管理员身份”运行程序即可解决
6.关闭VS2010,以管理员身份运行
好,终于成功了
7.调用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace WcfService1
{
class Program
{
static void Main(string[] args)
{
ConsoleApplication1.ServiceReference1.Service1Client wcfClient = new ConsoleApplication1.ServiceReference1.Service1Client();
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
Console.WriteLine( wcfClient.GetData(10));
watch.Stop();
Console.WriteLine("耗时:" + watch.ElapsedMilliseconds);
Console.ReadKey();
}
}
}
结果:
终于成功了,我因为是初学,所有才会出现这么多问题,希望能帮到和我一样的初学者,如果那个高手有简便后者快捷的方法,可以告诉我,我这方法太笨了。期待你的指点。
- MySQL优化原理
- Python深入06 Python的内存管理
- 微信登陆代码
- HTML语义化:HTML5的新标签及IE5.5~9的部分兼容方案
- TCP/IP(八)之总结TCP/IP四层模型
- 在Orchard中使用Image Gallery模块
- CentOS7设置IP地址
- 服务器端Javascript
- ASP连接数据库
- 彻底隐藏你HTML网页的源代码
- java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解
- 使用CSS制作文字环绕图片效果(文字内容包含<li>标签)
- ClojureScript魔法堂:搭建开发环境
- PHP error_reporting() 错误控制函数功能详解
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 行为型设计模式:备忘录模式
- 行为型设计模式:访问者模式
- redis实战第十篇 集群收缩
- redis实战第九篇 集群扩容自动迁移槽(redis-cli)
- 自动化运维| Ansible playbook的逻辑控制语句
- Windows通用应用平台UWP持久化
- redis实战第八篇 集群扩容 手动迁移槽
- Xinetd服务的安装与配置详解
- redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
- 使用ROS2机器人操作系统进行多机器人编程技术实践(Multi-Robot Programming Via ROS2 )
- 自动化运维实践 | Ansible playbook重用
- 手把手教你打造高效的 Kubernetes 命令行终端
- docker save load export import的区别
- 使用ABAC控制数据访问
- linux 压力测试工具之ab