解决方案 »

  1.   

    string strMsg = "中文编码 123a";
    直接发string
    你转来转去的根本不对
      

  2.   

    乱码是被你转换出来的,你直接Encoding.GetEncoding("GBK").GetBytes(strMsg),将得到的字节数组发送出去即可。
      

  3.   

    接口中需要发送的为string,不能为Byte[],又应该怎么办呢?
      

  4.   

    我不清楚你是通过什么方式使用Web服务的,如果你是通过项目中添加服务引用使用的,在程序的配置文件中的system.serviceModel配置部分应该有关于网络服务的配置信息,在网络服务的binding配置中,可以使用textEncoding属性,指定传递服务消息使用的XML文本编码,在代码中不用做任何处理,如:<basicHttpBinding>
        <binding name="WebService1Soap" textEncoding="GB2312"/>
    </basicHttpBinding>参考:http://msdn.microsoft.com/zh-cn/library/system.servicemodel.httpbindingbase.textencoding(v=vs.110).aspx
      

  5.   

    我是添加服务引用的方式来调用的,按照你的方式测试了,可是修改后在创建调用对象时出现了异常“文本消息格式中使用的文本编码“gb2312”不受支持。
    参数名: encoding”
      

  6.   

    web服务都是用HttpWebRequest类来请求的,再退一步就是WebClient类来请求,都是支持发送字节数组的,你倒底用的是什么啊?请求方式都不提及,直接一个只能发送字符串谁搞得清?Socket通信的底层走的都是字节,即使只能发送字符串,也有你看不到的字节转换,其中就涉及到字符编码,肯定有地方设置的。
      

  7.   

    web服务都是用HttpWebRequest类来请求的,再退一步就是WebClient类来请求,都是支持发送字节数组的,你倒底用的是什么啊?请求方式都不提及,直接一个只能发送字符串谁搞得清?Socket通信的底层走的都是字节,即使只能发送字符串,也有你看不到的字节转换,其中就涉及到字符编码,肯定有地方设置的。
    可以设备,就像5楼说的那样设置,只是设置了后,创建调用对象时出现了异常:“文本消息格式中使用的文本编码“gb2312”不受支持。
     参数名: encoding” 
      

  8.   

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="External2OssSoapBinding" closeTimeout="00:01:00"
                        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://172.16.166.203:8002/ei/services/External2Oss"
                    binding="basicHttpBinding" bindingConfiguration="External2OssSoapBinding"
                    contract="ServiceReference1.External2Oss" name="External2Oss" />
            </client>
        </system.serviceModel>
    </configuration>
    这个是添加服务引用时自动生成的,这样直接发送,无服务就会收到乱码,如果把messageEncoding="Text" textEncoding="utf-8" 改为messageEncoding="Text" textEncoding="gb2312",则会在创建 External2Oss对象时报异常“文本消息格式中使用的文本编码“gb2312”不受支持。
      参数名: encoding  ”
      

  9.   

    嗯嗯,查了一下文档,.NET自带的消息编码器好像只支持UTF-8、UTF-16 和 Big Endean Unicode这三种编码,要想使用其他编码,需要自己写一个自定义的消息编码器,在下面的文档里有完整的例子:
    http://msdn.microsoft.com/en-us/library/ms751486.aspx
      

  10.   

    配置文件里不支持的话,自己代码里面修改,BasicHttpBinding的TextEncoding是可以设置的,你找到你产生的cs文件后,去找里面修改BasicHttpBinding的地方。我因为不用自动引用很久了,无现成代码可循,你自己找找吧。
      

  11.   

    已解决,对方的WebService有一定的问题,后面重新引用新的服务后正常了