c++调用c#中的方法,返回字符串含“\,/”如何解决

问题描述

现在WCF写的一个方法(返回类型为string),另一台机器上c++调用这个方法,当结果中含有,/时,c++那边接受到的会变成\,/,我也有在c#中调试,c#返回的结果确实只是,/而不是\,/。但用抓包软件抓出来后发现c#传的竟然真的是\,/给c++请问原因是什么?如何解决?

解决方案

解决方案二:
c#如果接收字符串含有"等字符时,会自动进行转义,从而导致传给c++的也是转义后的格式不知道能否采用字符替换的方式来避免这个问题
解决方案三:
可为什么/也是呢?/不需要转的。
解决方案四:
字符串前面加@试试
解决方案五:
另外我知道@属于强制不转义字符串,但我怎么加到string前面呢?比如说stringa="n",怎么将@加到a前面??
解决方案六:
stringa=@"n"
解决方案七:
看看有没有那个wcf的方法的Attribute是可以处理这个的
解决方案八:
即便你追加了又有什么用呢,只要你是字符串传递的方式,通过了C#,还是会自动转义,是不会解析的,之前遇到过这样的,反正我最终的解决方案就是处理数据源,以保障传递给c#的不包含那些字符.
解决方案九:
引用5楼ssp2009的回复:

stringa=@"n"

如何在a前面加。a的值是变的。
解决方案十:
引用6楼sandy945的回复:

看看有没有那个wcf的方法的Attribute是可以处理这个的

3q,我查查看
解决方案十一:
我觉得应该不会这样吧。
解决方案十二:
做了个测试:vs2008新建wcf工程,修改两处地方1.web.config中endpoint改成bisicHttpBinding2.GetData返回字符串带publicstringGetData(intvalue){returnstring.Format("You\entered:{0}",value);}客户端是winform,使用AddserviceReference...加入引用。没做任何修改调用为:privatevoidbutton1_Click(objectsender,EventArgse){ServiceReference1.Service1Clientclient=newTestclient.ServiceReference1.Service1Client();stringres=client.GetData(10);}使用fiddler抓包。request:<s:Envelopexmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetDataxmlns="http://tempuri.org/"><value>10</value></GetData></s:Body></s:Envelope>response:<s:Envelopexmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetDataResponsexmlns="http://tempuri.org/"><GetDataResult>Youentered:10</GetDataResult></GetDataResponse></s:Body></s:Envelope>看起来没有问题啊。
解决方案十三:
你是不是在Debug或者Watch窗口中看的?在我的winform客户端中,调用webmethod后,vs中的hint和Watch,quickwatch窗口中都是\但是点击那个小放大镜,在TextVisualizer中是
解决方案十四:
returnstring.Format("You\entered:{0}",value);=>returnstring.Format("You\,/entered:{0}",value);bisicHttpBinding换成netTcpBinding试下
解决方案十五:
引用12楼findcaiyzh的回复:

你是不是在Debug或者Watch窗口中看的?在我的winform客户端中,调用webmethod后,vs中的hint和Watch,quickwatch窗口中都是\但是点击那个小放大镜,在TextVisualizer中是

我是c++调用c#,结果是有问题的。
解决方案:
像c++调用c#,java调用.net的webservice这两天遇到的问题都挺类似的。java调.net,如p在java那接收到的就是p,\p就是p。所以我针对java做的就是在c#这边将replace成\再发过去。c++调用c#,如p在c++那接收到的就成了\p,\p就成了\\p。所以暂时在c++端收到的结果将\replace成可这总归不是办法啊,我很想知道错误的源头是什么?另外有个更奇怪的问题就是,c++调用wcf方法,当参数含#%&?=/时,根本就调不到wcf中的方法。代码如下:///<summary>///..///</summary>[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]publicclassDataServerHttp:IDataServerHttp{protectedstaticILoglog=LogManager.GetLogger("DataServerLog");publicstringClientRequest(stringqueryString){log.Info(string.Format("[Client]ClientRequestString:{0}",queryString));}}

就wcf中这么简单的一个方法,c++调用时,参数含上面的特殊字符,就调不到了!很困扰,如果有人能够帮忙解决,或者给点建设性提示,小弟不胜感激。
解决方案:
引用12楼findcaiyzh的回复:

你是不是在Debug或者Watch窗口中看的?在我的winform客户端中,调用webmethod后,vs中的hint和Watch,quickwatch窗口中都是\但是点击那个小放大镜,在TextVisualizer中是

这个我知道,确实是这样的。原理就不知道了,跟c#的编译器有关(我瞎说的。。)??
解决方案:
引用14楼takako_mu的回复:

引用12楼findcaiyzh的回复:你是不是在Debug或者Watch窗口中看的?在我的winform客户端中,调用webmethod后,vs中的hint和Watch,quickwatch窗口中都是\但是点击那个小放大镜,在TextVisualizer中是我是c++调用c#,结果是有问题的。

但是在fiddler中看到只有一个。
解决方案:
引用13楼sandy945的回复:

returnstring.Format("You\entered:{0}",value);=>returnstring.Format("You\,/entered:{0}",value);bisicHttpBinding换成netTcpBinding试下

明天去单位试一试。
解决方案:
引用18楼findcaiyzh的回复:

引用13楼sandy945的回复:returnstring.Format("You\entered:{0}",value);=>returnstring.Format("You\,/entered:{0}",value);bisicHttpBinding换成netTcpBinding试下明天去单位试一试。

thx
解决方案:
测试了net.tcp,测试步骤:1.vs2008中创建wcfservicelibrary.2.修改1:GetData改成publicstringGetData(intvalue){returnstring.Format("You\,/entered:{0}",value);}3.修改config成net.tcp*baseaddress<baseAddresses><addbaseAddress="net.tcp://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service1/"/></baseAddresses>*binding:<endpointaddress=""binding="netTcpBinding"contract="WcfServiceLibrary1.IService1">*Servicebehaviors:<behaviorname="WcfServiceLibrary1.Service1Behavior"><!--Toavoiddisclosingmetadatainformation,setthevaluebelowtofalseandremovethemetadataendpointabovebeforedeployment--><serviceMetadata/><!--Toreceiveexceptiondetailsinfaultsfordebuggingpurposes,setthevaluebelowtotrue.Settofalsebeforedeploymenttoavoiddisclosingexceptioninformation--><serviceDebugincludeExceptionDetailInFaults="False"/></behavior>其它都是默认的。4.F5启动WCFtestclient来测试。fiddler没法监控tcp协议,因此在WCFTestClient中进行测试.结果见下图好像也没啥问题。你得共享下你的代码,得看看问题究竟在那里。
解决方案:
能看到图吧?
解决方案:
引用21楼findcaiyzh的回复:

能看到图吧?

能的。谢谢,我试下。
解决方案:
你的response数据是:You./entered:13。这个不对啊。少了个??
解决方案:
加@之后,用""把后面的引起来强制转换就可以
解决方案:
楼主的代码有问题。任何的传输都是基于二进制的。只要你在传入的是什么样的字符。输出的肯定不会变。publicstringGetData(intvalue){returnstring.Format("You\,/entered:{0}",value);}strings=GetData(22);//楼主应该看看s到底是多少?

楼主晕了。
解决方案:
引用23楼takako_mu的回复:

你的response数据是:You./entered:13。这个不对啊。少了个??

\在C#里不是转义吗?
解决方案:
STRING转为比特流传试试,看看客户端接收结果以及转换回来的结果

时间: 2024-09-20 00:41:01

c++调用c#中的方法,返回字符串含“\,/”如何解决的相关文章

c++调用c#中的方法,返回字符串含“\”如何解决

问题描述 c++调用c#的方法,如下:http://119.119.115.56:8300/ClientService/Type=V&UserName=jimmy_wei&Password=&ServerName=alenyang&JobID=64&ProjectName=P%2FP"原来我的ProjectName=P/P,现在已经编码成P%2FP了(C++代码),但还是调不到c#的方法(Server端.C#写的),求赐教! 解决方案 解决方案二:转码问题

javascript-如何调用JavaScript中confirm()的返回值?

问题描述 如何调用JavaScript中confirm()的返回值? 大家好!我是一名JavaScript初学者,没有其他语言基础,在学习中,我想先对这门语言有一个宏观纵览,有了编程的思路,再回到细节中夯实基本功,以避免"淹死"到那些术语和细节中 我想实现这样一个功能: 1.利用prompt()函数让用户输入姓名 2.利用confirm()函数判断用户的性别 3.confirm()返回真,则alart()显示"你好,××先生! 反之,显示"你好,××女士!"

iOS重写父类中的方法时要先调用父类中的方法的原因

现有两个类: 1.Object001继承自NSObject #import <Foundation/Foundation.h>   @interface Object001 : NSObject   //Object001的头文件,我只是在这里面声明了个方法 -(void)printfString;   @end   #import "Object001.h"   @implementation Object001   //Object001的实现文件,我实现了声明的pri

托管C++调用DLL中的方法时遇到yield时该如何? [问题点数:40分]

问题描述 假设className,methodName是参数被传入我用下面的代码调用了某个DLL中的方法Assembly^dllAssembly=Assembly::LoadFrom(dllPath);array<System::Type^>^selectType=dllAssembly->GetTypes(className);MethodInfo^selectedMethod=selectType->GetMethod(methodName);System::Object^in

js调用Flex中的方法并向flex中传参及flex调用js示例

首先,有了一个swf文件,test.swf,同时也有一个自动生成的html文件,test.html. 然后,在另外一个文件,test.jsp中,通过iframe,引入了test.html,即引入了swf. 现在想要在test.jsp中,向flex传参,并调用flex中的方法,我采用的方法是: 首先,在jsp中写一个调用flex的方法,如下 复制代码 代码如下: function initSWF(){ //得到swf的object var obj = window.frames["rightfra

linux驱动-linux 用户态调用驱动中的函数返回-1

问题描述 linux 用户态调用驱动中的函数返回-1 /*****************驱动代码***************/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl

[急]asp中调用javascript中的方法

问题描述 1.vs2008模板中JScript文件与Javascript是否一样,有没有区别2.如何创建.js文件(怎么在里面写的方法,页面不能调用)functionGetPic(){varm=10;varn=Math.floor(Math.random()*m+1);if(true){document.write("<imgsrc='include/img/top"+n+".gif'/>");}}3.如何调用.js文件中的一个方法...如果我要在一个&

Anroid 求解答代码中如何获取到抽象类的对象,从而调用抽象类中的方法。(急)

问题描述 Anroid 求解答代码中如何获取到抽象类的对象,从而调用抽象类中的方法.(急) public abstract class DataSource { protected static DataSource me; public static DataSource getInstance() { if (me == null) {} try { if (me == null) { //下面这一行代码在Application中是空实现 MyApplication.getInstance(

i-封装一个类库,怎样调用nsobject中的方法创建一个视图并进行跳转

问题描述 封装一个类库,怎样调用nsobject中的方法创建一个视图并进行跳转 如题:我想知道的是在NSObject这个类中的方法该怎么实现?需要用到什么,求具体代码讲解!!!坐等~~~~~~ 解决方案 参考:http://www.2cto.com/kf/201110/108584.html

我想咨询下如何在UI层界面中调用DAL中的方法

问题描述 我想咨询下如何在UI层界面中调用DAL中的方法,学习3层我想在原开始层ui层调用DAL层中的方法,知道这样做不合理但是不会调用把DAL可以NEW出来但是在使用方法的时候不能使用不知道是什么问题·. 解决方案 解决方案二:不能使用,是神马意思?解决方案三:如果你需要跨层调方法,那你应该定义成静态的..然后添加引用添加using什么的都要加才行..不过不推荐你这样..这样等于你第一层直接和第3层发生关系了解决方案四:那三层架构是必须要层层递进吗,有没有关于三层架构的资料推荐的书籍解决方案五