webabcd - 专注于asp.net

ASP.NET
从现在开始 一切都不晚
posts - 150, comments - 4182, trackbacks - 344, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

化零为整WCF(1) - 不能免俗,我也从Hello开始

Posted on 2007-12-05 12:22 webabcd 阅读(4640) 评论(33)  编辑 收藏 所属分类: WCF
[索引页]
[源码下载]


化零为整WCF(1) - 不能免俗,我也从Hello开始


作者:webabcd


介绍
WCF(Windows Communication Foundation) - 废话不多说,俗也不能免,我也从Hello开始


示例
1、服务
IHello.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Sample
{
    
/// <summary>
    
/// IHello接口
    
/// </summary>

    [ServiceContract]
    
public interface IHello
    
{
        
/// <summary>
        
/// 打招呼方法
        
/// </summary>
        
/// <param name="name">人名</param>
        
/// <returns></returns>

        [OperationContract]
        
string SayHello(string name);
    }

}

Hello.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;

namespace WCF.ServiceLib.Sample
{
    
/// <summary>
    
/// Hello类
    
/// </summary>

    public class Hello : IHello
    
{
        
/// <summary>
        
/// 打招呼方法
        
/// </summary>
        
/// <param name="name">人名</param>
        
/// <returns></returns>

        public string SayHello(string name)
        
{
            
return "Hello: " + name;
        }

    }

}


2、宿主
Hello.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WCF.ServiceLib.Sample.Hello" %>

Web.config
<?xml version="1.0"?>
<configuration>
  
<system.serviceModel>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="SampleBehavior">
          
<!--httpGetEnabled - 使用get方式提供服务-->
          
<serviceMetadata httpGetEnabled="true" />
        
</behavior>
      
</serviceBehaviors>
    
</behaviors>
    
<services>
      
<!--name - 提供服务的类名-->
      
<!--behaviorConfiguration - 指定相关的行为配置-->
      
<service name="WCF.ServiceLib.Sample.Hello" behaviorConfiguration="SampleBehavior">
        
<!--address - 服务地址-->
        
<!--binding - 通信方式-->
        
<!--contract - 服务契约-->
        
<endpoint address="" binding="basicHttpBinding" contract="WCF.ServiceLib.Sample.IHello" />
      
</service>
    
</services>
  
</system.serviceModel>
</configuration>


3、客户端
Hello.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Hello.aspx.cs"
    Inherits
="Sample_Hello" Title="不能免俗,我也从Hello开始" 
%>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    
<asp:TextBox ID="txtName" runat="server" Text="webabcd" />
    
&nbsp;
    
<asp:Button ID="btnSayHello" runat="server" Text="Hello" OnClick="btnSayHello_Click" />
</asp:Content>

Hello.aspx.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class Sample_Hello : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{

    }


    
protected void btnSayHello_Click(object sender, EventArgs e)
    
{
        Sample.HelloClient proxy 
= new Sample.HelloClient();

        Page.ClientScript.RegisterStartupScript(
            
this.GetType(),
            
"js",
            
string.Format("alert('{0}')", proxy.SayHello(txtName.Text)),
            
true);

        proxy.Close();
    }

}


Web.config
<?xml version="1.0"?>
<configuration>
  
<system.serviceModel>
    
<client>
      
<!--address - 服务地址-->
      
<!--binding - 通信方式-->
      
<!--contract - 服务契约-->
      
<endpoint address="http://localhost:3502/ServiceHost/Sample/Hello.svc" binding="basicHttpBinding" contract="Sample.IHello" />
    
</client>
  
</system.serviceModel>
</configuration>


运行结果:
单击"btnSayHello"后弹出提示框,显示"Hello: webabcd"


OK
[源码下载]

Feedback

#1楼    回复  引用    

2007-12-05 22:17 by 黑白 [未注册用户]
早就想学这个了,不过看了很多资料都看不懂
希望兄弟的这个能好懂些
先下来看看

#2楼    回复  引用    

2007-12-05 23:55 by ivw [未注册用户]
呵呵,终于有新文章出了,你的运行环境是VS08吗?

#3楼 [楼主]   回复  引用  查看    

2007-12-06 08:03 by webabcd      
@黑白
:)
大家多交流

@ivw
:)
是地

#4楼    回复  引用  查看    

2007-12-06 16:53 by 迷失、伤心浪子      
VS2005打不开!!!!!!!!

#5楼    回复  引用    

2007-12-06 20:48 by 黑白 [未注册用户]
@迷失、伤心浪子
要用vs2008

另外有个问题请教一下webabcd
我照着你的例子从新写了一遍
可是我的系统生成的代理类是Hello.Hello
而你的是Hello.HelloClient

兄弟知道是为什么吗?

#6楼 [楼主]   回复  引用  查看    

2007-12-07 08:07 by webabcd      
@迷失、伤心浪子
用vs2008写的

@黑白
添加引用的时候选择添加服务引用,而不是web引用

#7楼    回复  引用  查看    

2007-12-07 16:09 by Clingingboy      
这个blog资源不错,关于wcf的,http://www.rainsts.net/.
可参考下

#8楼 [楼主]   回复  引用  查看    

2007-12-07 20:28 by webabcd      
@Clingingboy
:)
正愁不知道怎么往下走呢
谢谢兄弟了

#9楼    回复  引用  查看    

2007-12-10 11:42 by seabluescn      
能否请楼主写点比Hello还要基础一点的东西呢?比如,什么是WCF,有什么用?解决哪些以前很难解决的问题?在整个技术开发框架内WCF充当什么角色?有什么样的应用前景,等等。谢谢!

#10楼 [楼主]   回复  引用  查看    

2007-12-10 16:20 by webabcd      
@seabluescn
:)
兄弟说的那些网上已经有好多介绍了,我觉得以我的水平不可能比他们说的更清楚

#11楼    回复  引用    

2007-12-12 13:28 by ivw [未注册用户]
兄弟,window.open打开指定大小的窗口,然后在页面里用document.body.offsetHeight来取窗口高度,如果把窗口最大化了或把窗口缩小取出来的值还是window.open时设定的大小。有试过这问题吗?

#12楼 [楼主]   回复  引用  查看    

2007-12-12 17:42 by webabcd      
@ivw
我试了一下,没问题啊
offsetHeight取的值没问题

#13楼    回复  引用    

2007-12-13 08:31 by ivw [未注册用户]
不会吧,怎么我在onlod里设置获取他的高度,最大化了但还是弹出来时的大小呢。奇怪

#14楼 [楼主]   回复  引用  查看    

2007-12-14 07:55 by webabcd      
@ivw
我试了一下
<body onload="alert(document.body.offsetHeight)">

</body>

没问题啊

#15楼    回复  引用    

2007-12-14 10:38 by ivw [未注册用户]
真奇怪啊。。我换了第二种方法都没问题。哎。。。。。。。

有个问题请问你,<img src="/test/1.gif" />
像上面那样,怎样可以得到虚拟目录的根目录啊?上面它返回到网站的根目录了,有没有办法指向虚拟目录的根目录啊?

#16楼 [楼主]   回复  引用  查看    

2007-12-14 14:41 by webabcd      
@ivw
这样肯定是根目录的

如果要指向虚拟目录的根目录的话,可以在cs代码里写

#17楼    回复  引用    

2007-12-16 23:47 by ivw [未注册用户]
但如果是在CS里做的话那就很不方便啊,如果那是一个HTML文件那怎么办啊?有没有办法像CS代码里的 ~ 那样直接指向虚拟目录的根目录啊?或其它办法也行。

#18楼 [楼主]   回复  引用  查看    

2007-12-17 00:39 by webabcd      
@ivw
那就只能走相对路径了,不同的目录就类似../这样去找了
其实线上的环境很少用虚拟目录的,绝大多数都是虚拟主机

#19楼    回复  引用    

2007-12-17 08:33 by ivw [未注册用户]
但这种问题也经常会出现,例如我做了个控件,但它里面调用了一些图片之类的资源,如果不能得到根目录去定位那就很麻烦了,要每次都去修改所有的路径

#20楼 [楼主]   回复  引用  查看    

2007-12-17 10:41 by webabcd      
@ivw
以图片为例
固定图片都在css里写
动态加载的图片都在.cs文件里写
就ok了

#21楼    回复  引用    

2007-12-17 17:08 by ivw [未注册用户]
如果动态的图片太多那这种方法就不好了。:(

#22楼 [楼主]   回复  引用  查看    

2007-12-18 08:11 by webabcd      
@ivw
只能这样了
个人感觉需要指定虚拟目录的根目录的话
Page.ResolveUrl
是最好的办法

#23楼    回复  引用  查看    

2008-03-12 10:09 by 北漂浪子      
请问楼主用的是VS2008那个版本,我用的express版本,功能太少,只能打开和新建Website,不能新建和打开项目,想添加一个Class Library都不可以,痛苦。

#24楼 [楼主]   回复  引用  查看    

2008-03-12 15:47 by webabcd      
@北漂浪子
:)
下个完全版吧

早晚要用的啊

#25楼    回复  引用  查看    

2008-03-12 16:15 by 北漂浪子      
我在Microsoft网站上找了,有专业版的(试用期90天),你能不能给我提供一下完全版的下载链接,最好不是试用的。

#26楼 [楼主]   回复  引用  查看    

2008-03-12 20:18 by webabcd      
@北漂浪子
:)
我的也是试用期90天,除了有时间限制外和正式版没区别,用那个key(网上可以搜索到)注册一下就是正式版了

#27楼    回复  引用  查看    

2008-06-05 10:48 by Howard Queen      
从今天起耐心、细心学习 wcf,从每篇文章看起;howard 到此一读。

#28楼 [楼主]   回复  引用  查看    

2008-06-05 14:51 by webabcd      
@Howard Queen
:)
多看看不同的人写的东西,会收获更多的

#29楼    回复  引用    

2008-08-06 15:40 by microsoft_sun [未注册用户]
新手看你这个犯迷糊啊,我摸索了好一下才能跑出来

#30楼 [楼主]   回复  引用  查看    

2008-08-06 17:14 by webabcd      
@microsoft_sun
:)
呵呵,好多人都这么说过

我写的东西,代码较多,需要说明的基本上都写在代码注释里

从来没接触过的,确实是很难理解

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-24 09:10 编辑过


相关链接: