blueskyc's blog
永不放弃
posts - 36,  comments - 5,  trackbacks - 0

 本章内容主要是根据我做的实验来阐述这2种添加服务针对WCF的不同之处,我们按照示例一步一步来看。

 

如下是工程的结构:

该WCF服务是通过控制台程序(Host)以自宿的形式发布的,绑定使用wsHttpBinding。我们在Client端分别添加

服务引用(add service references)和添加Web引用(add Web Reference )来引用WCF服务。

 

以下是客户端的代码,分别使用添加服务引用和添加Web引用的服务代理来调用WCF的方法: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Yingchao.Client.localhost;
using Yingchao.Client.ServiceReference1;

namespace Yingchao.Client
{
    class Program
    {
        static void Main(string[] args)
        {
            // add service reference's proxy
            Service1Client client = new Service1Client();
            Console.WriteLine(client.GetData(111));

            // add web reference's proxy
            Service1 s = new Service1();
            Console.WriteLine(s.GetData(1234, true));

            Console.Read();
        }
    }
}

 

客户端配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Yingchao.Client.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
  <system.serviceModel>
    <client>
      <!-- 添加服务引用时自动生成 -->
      <endpoint address="http://localhost:8732/service" binding="wsHttpBinding"
          contract="ServiceReference1.IService1" name="WSHttpBinding_IService1">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
    <applicationSettings>
      <!-- 添加Web服务引用时自动生成 -->
        <Yingchao.Client.Properties.Settings>
            <setting name="Yingchao_Client_localhost_Service1" serializeAs="String">
                <value>http://localhost:8732/service</value>
            </setting>
        </Yingchao.Client.Properties.Settings>
    </applicationSettings>
</configuration>

服务端配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
    <system.serviceModel>
    <services>
      <service name="Yingchao.Service.Service1">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8732/service" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
        <endpoint address ="" binding="wsHttpBinding" contract="Yingchao.Contract.IService1">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

 

我们启动服务后,运行客户端,我们看看结果是什么:

 

我们看到这里添加Web服务代理调用WCF的方法的结果没有显示出来,而是出现了"操作超时"错误。

 

那我们更改服务端配置文件的绑定:wsHttpBinding 改成 basicHttpBinding,编译后更新引用的服务。

然后再次运行客户端,我们看看结果:

 我们看到这次2个引用服务都成功调用。可见添加Web服务应该只能使用basicHttpBinding,也许微软是为了向前兼容留下的。

然后,分别添加的服务引用生成的Reference.cs里面生成的代码也不一样。添加服务引用更偏向WCF规则。

 

我查资料也发现跟我想的差不多.(http://social.microsoft.com/Forums/zh-CN/xmlwebserviceszhchs/thread/808d870b-49f1-47ac-b105-4beb580bcec6)

 

posted @ 2012-04-28 00:18 Cherry Chen 阅读(8) 评论(0) 编辑

 

      学习WCF的时候,寄宿于IIS研究了很长时间,都一直没成功,一直都是IIS错误画面游荡中…… 很郁闷很郁闷的。偶然想到是否因为WCF注册的原因?

于是MSDN找到WCF注册的资料(http://msdn.microsoft.com/zh-cn/library/ms732012(v=vs.90).aspx),运用命令进行重新注册。

步骤如下:

1,开始菜单中打开Visual Studio 2008 Command Prompt (Visual Studio 2008命令提示符);

2,跳转到C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation目录中;

3,ServiceModelReg.exe -r -y。

4,注册完之后,再访问WCF服务就可以了。

 

如果出现MIME错误的,可能是因为没有svc后缀,那我们加上试试,

步骤:

1,我们在C:\Windows\System32\Inetsrv\Config\目录中,找到applicationHost.config文件;

2,在staticContent节点中,我们为.svc文件加入以下MIME条目

    <mimeMap fileExtension=".svc" mimeType="application/octet-stream" />

3,保存关闭文件。

参考:http://technet.microsoft.com/en-us/library/dd632554.aspx

 

 

posted @ 2012-04-11 14:15 Cherry Chen 阅读(7) 评论(0)  编辑

  在liunx中新建用户后,win7 使用ssh(cygwin)连接liunx的时候,一直出现问题,需要输入密码。我证书已经配置了,还是需要。 以前的用户是可以的。最终网上搜索解决了,原来是权限问题。

主要有三个权限

  (1) /home/username这目录的权限应该是700

  (2) /home/username/.ssh 这个目录的权限也应该是700

  (3) /home/username/.ssh/ authorized_keys这个文件的权限是644

如果还有问题,那么tail /var/log/secure一下这个日志文件,就能发现问题。

摘自(http://blog.csdn.net/emili/archive/2009/02/01/3856622.aspx

这里做备案,以备后用。

完整配置过程:

步骤:

1 ssh-keygen -t rsa  生成密匙

2 在liunx中当前用户文件夹下(/home/username/)创建.ssh文件夹

3 把本地生成的id_rsa.pub(xp:documents and Settings/.ssh中。)文件复制到liunx的.ssh文件夹下

4 把id_rsa.pub文件命名为authorized_keys2

现在就可以测试是否配置成功。

输入: ssh username@ip 回车。 如果直接进入liunx,那恭喜你配置成功。如果要求输入密码,那就说明没有配置好。

posted @ 2011-05-10 18:13 Cherry Chen 阅读(177) 评论(0) 编辑
摘要: JDK1.6中自带了webservice的功能,因为集成了JAX-WS,这非常方便,不用再用第三方包来开发了。下面我们开始构建:  1,先用Eclipse建立一个动态网站,注意需要生成web.xml,建工程的时候不要忘记勾选;  2,建立类实现Web Services接口,下面是一个简单定义Web Services接口的实现类:代码    3,Person类[代码]这样,我们基本上就实现了webservice的构建,是不是感觉不是很难,跟写普通的java方法一样,其实jdk自带的webservice是通过注释注入方法实现的。所以上面那些以"@"符号开头的都是非常重要的,也是必须的。下面我们来配阅读全文
posted @ 2010-12-17 15:32 Cherry Chen 阅读(1184) 评论(0) 编辑

// number为四舍五入的数字

// keta是保留小数点之后的位数,从0开始 (0,1,-1)

// -1: 表示整数  (155->160)  1:(1.05 ->1.10)  0:(0.5->1.0)

public BigDecimal rounds(BigDecimal number, int keta) {
        
        NumberFormat   nbf=NumberFormat.getInstance();
        nbf.setMinimumFractionDigits(keta+1);
        BigDecimal value =  new BigDecimal(nbf.format(number.setScale(keta, BigDecimal.ROUND_HALF_UP).doubleValue()));
        
        return value;
    }

posted @ 2010-07-01 12:23 Cherry Chen 阅读(91) 评论(0) 编辑
摘要: 参数format格式详细用法 格式字符 关联属性/说明 d ShortDatePattern -----08/30/2006 D LongDatePattern -----Wednesday, 30 August 2006 f 完整日期和时间(长日期和短时间) -----Wednesday, 30 August 2006 23:21 F FullDateTimePattern(长日期和长时间) -----Wednesday, 30 August 2006 23:22:02 g 常规(短日期和短时间) -----08/30/2006 23:22 G 常规(短日期和长时间) -----08/30/阅读全文
posted @ 2010-05-12 17:56 Cherry Chen 阅读(61) 评论(0) 编辑
摘要: public void UpdateData(string strSN) { SqlTransaction objTrans = null; SqlBulkCopy objBulkCopy = null; DataTable objDt = new DataTable(); DataRow dr = null; if (!objDt.Columns.Contains("id")) { objDt.Columns.Add("id"); } if (!objDt.Columns.Contains("s")) { objDt.Columns.Add("s"); } if (!objDt.Colum阅读全文
posted @ 2010-05-12 17:35 Cherry Chen 阅读(137) 评论(0) 编辑
摘要: [代码]阅读全文
posted @ 2010-04-27 16:06 Cherry Chen 阅读(270) 评论(0) 编辑
摘要: 可以通过以下sql语句来实现row_number()函数相同的效果但是必须要id不重复,如果你能找到你的表中的几个字段合起来永远不会重复,就能行。运用颠倒算法:strSql.Append("SELECT g.id, g.sid, g.active_date, g.sn, h.reg_key, h.active_code FROM "); strSql.Append(" (SELECT f.id, f.sid, f.active_date, sn.sn FROM ");       // maximumRows每页显示行数 strSql.AppendFormat("(SELECT TOP 100阅读全文
posted @ 2010-04-09 17:36 Cherry Chen 阅读(29) 评论(0) 编辑
摘要: 曾经读取一个exe文件的内容,用encoding去读取始终失败,无奈……, 最后终于发现可以用 BinaryReader去读取,成功的喜悦充满心头。哈哈…… 下来blog做下记录,以免以后被遗忘。内容如下:FileStream fs1 = new FileStream(strFilePath, FileMode.Open, FileAcces...阅读全文
posted @ 2010-04-09 17:32 Cherry Chen 阅读(28) 评论(0) 编辑
仅列出标题  下一页