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();
        }
    }
}

结果:

 终于成功了,我因为是初学,所有才会出现这么多问题,希望能帮到和我一样的初学者,如果那个高手有简便后者快捷的方法,可以告诉我,我这方法太笨了。期待你的指点。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.NET开发那点事

AServer - 基于Asp.net core Kestrel的超迷你http服务器

  AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不...

1101
来自专栏我的博客

安卓上传文件(绝对可以用)

说明:使用是httpclient+MultipartEntity,因此需要导入包:httpmime-4.1.1(这个包非常重要!务必导入!) 写在前面:我只是贴...

3695
来自专栏JadePeng的技术博客

asp.net MVC 权限设计

几点说明:     1、该权限系统是个网站用的,用户简单,因此不涉及到部门这些信息     2、基于将角色与controller、action相关联来判断...

4659
来自专栏听雨堂

页面状态保持机制(编辑中)

Web应用程序中,有很多状态需要在页面的反复回调中能够保持住,还有一些状态需要在页面之间保持。对于状态的保持,是一个值得研究的问题。状态处理不当是页面失效或错误...

2595
来自专栏技术博客

Asp.Net MVC3.0网站统计登录认证的在线人数

  对于一个网站来说,统计在线人数是一个很重要的工作。平时也发现很多的网站论坛等都有在线人数的显示。对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不...

1132
来自专栏Create Sun

quartz.net任务调度:源码及使用文档

前言   前段时间把自己封装quartz.net 类库的过程总结到博客园,有网友想要看一下源码,所以就把源码传到github上去了,今天把地址分享给大家,程序中...

3549
来自专栏Python

Django内置Admin

Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contri...

2419
来自专栏代码世界

Django-admin管理工具

1402
来自专栏菩提树下的杨过

Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由

以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后...

18910
来自专栏丑胖侠

《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例

3.1 Hello World 实例 在上一章中介绍了Drools5x版本中规则引擎使用的实例,很明显在Drools7中KnowledgeBase类已经标注为“...

3086

扫码关注云+社区