WCF:该不该注解里值使用枚举举值

一、创建时,WCF Service中HttpContext.Current为null的解决办法
1. 在hosting WCF的web.config中加入:
&system.serviceModel&
&&& &serviceHostingEnvironment aspNetCompatibilityEnabled="true"/&
&/system.serviceModel&
2. 在Service的类定义上加上下面Attribute:
[AspNetCompatibilityrequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
二、错误提示:调用方未由服务进行身份验证。
修改WCF服务的web.config文件system.serviceModel下添加配置:
&bindings&
&wsHttpBinding&
&&& &binding name="bindingConfiguration1"&
&&&&& &security mode="None"&
&&&&&&& &transport clientCredentialType="None"/&
&&&&&&& &message clientCredentialType="None"/&
&&&&& &/security&
&&& &/binding&
&/wsHttpBinding&
&/bindings&
&&& &/system.serviceModel&
&/configuration&
并修改behaviors下的endpoint,添加bindingConfiguration="bindingConfiguration1"
三、已超过传入消息(65536)的最大消息大小配额
解决方案1:调用方的代码里加入:
(client.Endpoint.Binding as WSHttpBinding).MaxReceivedMessageSize = int.MaxV
解决方案2:修改客户端调用方的Config配置文件:
&system.serviceModel&
&&& &bindings&
&&&&&&& &wsHttpBinding&
&&&&&&&&&&& &binding maxReceivedMessageSize=""
四、调用时服务端返回400 Bad Request错误
解决方案:修改服务端的Config配置文件,增加maxReceivedMessageSize设置:
&system.serviceModel&
&&& &bindings&
&&&&&&& &wsHttpBinding&
&&&&&&&&&&& &binding name="bindingConfiguration1" maxReceivedMessageSize=""
五、 无法打开安全通道,因为与远程终结点的安全协商已失败。
这可能是由于用于创建通道的 EndpointAddress 中不存在 EndpointIdentity 或错误指定了 EndpointIdentity。
请确认由 EndpointAddress 指定或暗示的 EndpointIdentity 正确标识了远程终结点。
这个错误通常是服务端相关配置修改了,删除引用,重新添加引用即可
六、接收对
的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志。
1、没有重新生成代理文件
2、这是因为WCF返回值无法序列化造成的
WCF的方法,不能返回Object、ICollection、IList之类的不明确的数据类型,但是IList&string&这样的类型可以返回,如果返回IList&SimpleSoft&这样的自定义类型,需要在接口上增加KnownType,如:
[ServiceContract]
[ServiceKnownType(typeof(SimpleSoft))]
public interface ISearchService
七、格式化程序尝试对消息反序列化时引发异常: 尝试对参数
进行反序列化时出错: 方法名。InnerException 消息是&在行 1、位置 1485 出现错误。 元素&,例如,通过使用 KnownTypeAttribute 属性或通过将其添加到传递给 DataContractSerializer 的已知类型的列表等方法。&。有关详细信息,请参阅 InnerException。
接口返回父类,但是实际返回的是子类,就会出现这个错误,解决方法,在父类定义上添加属性,如:
[KnownType(typeof(FullSoft))]
public class SimpleSoft
八、读取 XML 数据时,超出最大字符串内容长度配额 (8192)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性,可增加此配额。
解决方案:修改客户端的Config配置文件,增加maxStringContentLength设置:
&system.serviceModel&
&&& &bindings&&wsHttpBinding&&binding name=""....&
&readerQuotas maxStringContentLength=""
九、无 法激活服务,因为它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET 兼容性。请在 web.config 中关闭 ASP.NET 兼容性模式或将 AspNetCompatibilityRequirements 属性添加到服务类型且同时将 RequirementsMode 设置为&Allowed&或&Required&。
解决办法:
修改相应&& 服务.svc.cs
using System.ServiceModel.A
[AspNetCompatibilityRequirements (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]
十、WCF接口的参数,如果是枚举值,则必须是已经定义的枚举
比如枚举定义: enum aaa{aa=1, bb=2} 如果参数有aaa类型,传递3就会出错,因为枚举定义里没有3
如果枚举定义加上Flags属性,就可以传递3了(等于是aaa.aa | aaa.bb)
enum aaa{aa=1, bb=2}
十一、作为WCF接口的参数,其成员必须有public的set属性,否则不会传递,比如下面的a参数可以在wcf中使用,下面的b参数无法使用:
public aaa{
&&& public int a{}
&&& public int b{}
十二、System.ArgumentException: 此集合已经包含方案 http 的地址。此集合中每个方案中最多只能包含一个地址。&
WCF 针对每个schema只支持一个绑定,所以站点不能绑定多个主机头来使用WCF,如果绑定多个主机头,可以在Web.config里配置,但是如下配置后,其它主机头无法使用这个wcf:
&serviceHostingEnvironment&
&&& &baseAddressPrefixFilters&
&&&&&&& &add prefix=""/&
&&& &/baseAddressPrefixFilters&
&/serviceHostingEnvironment&
十三、在wcf项目下,找到web.config 文件修改如下(蓝色部分)
& &behaviors&&&&& &serviceBehaviors&&&&&&&& &behavior&&&&&&&&&& &!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 --&&&&&&&&&& &serviceMetadata httpGetEnabled="true"/&&&&&&&&&& &!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --&&&&&&&&&& &dataContractSerializer maxItemsInObjectGraph=""/&&&&&&&&&& &serviceDebug includeExceptionDetailInFaults="true"/&&&&&&&& &/behavior&&&&&& &/serviceBehaviors&& &/behaviors&
阅读(...) 评论()当前位置: &
节日好,wcf能作来crud来操作吗?
最近在做一个仓库的程序,需要在通过互联网运行,自己又没有b/s的经验。客户的数据库服务器,又不会公布到公网上。我现在准备建一个wcf提供相当于sqlhelper的方法,让客户端调用执行返回数据。大家没有朋友这样做的吗?这样最大的问题是直接传递sql字符串安全问题及多传sql字符串效率问题吧?还没有其它更好的解决方案。定义接口来实现的话,太复杂了,时间上又来不及!谢谢!
WCF&Data&Services/en-us/library/cc668792(v=vs.100).aspx使用的时候注意安全。这里有个中文的简单介绍:WCF&Data&Service&QuickStart/shanyou/archive//1668210.html谢谢,网上搜索看到了,因为我现在是要布署,客户端。如果采用这种试,我以前积累的代码,基本上都不可以用。我相信估计没有人让wcf来直接执行sql吧。WCF操作数据库都是有风险的,传sql语句也没有什么不可以的。就是要在风险,性能,开发效率上找个平衡点罢了。如果你的网站已经是以sql语句方式调用数据库,说明存在漏洞的几率已经很大了。改成WCF也不会更糟糕,只要保证&只有你的网站,也就是WCF客户端能访问WCF,就可以了。我的不是网站,是客户端。之前我自己写了一个关于界面、权限、查询、orm等的c/s客户端框架,最近需要做一个在互联网上运行的程序,企业管理程序。因此不想重新做,只需要数据操作替换就行了。经过一晚上研究,现在采用sql字符串的方式,基本测试成功了达到了我的要求,之前框架代码全部都可以用。但是在实际使用过程,现在发现一个问题就是,我在生成sql语句与参数对象集合,总是提示不成功,参数达到四十多个。自己使用XmlSerializer又能序列化成功。发现不好找原因。不能序列化找到原因了。有一个枚举值造成的!没有必要使用什么又大又慢的WCF。例如普通人都知道的支持ajax类似的轻量级http请求就可以,返回数据集合数据使用标准的Json&Array格式表示。这样做的问题是,不论谁都能胡乱修改数据了。因为你没有业务逻辑层,而是在表现层直接去操作DAL。其实那些根本不接受基本的分层开发方式的人,都找这个借口。一旦这样的借口成立了,往往就更懒得去改变了。关键是,如果你已经有了几十个BLL服务需要客户端调用,你就不会找这种借口。而很多人没有一个开放的业务逻辑系统,“为了三层而三层”地空谈按照业务接口开发,那么自然就会总是背弃自己的主张比如你看例如淘宝api、腾讯api之类的系统,它们也许不能像网页或者QQ一样直接地看上去获得什么利润,但是这是一个控制各种客户端的接口层。有了这个层,那么可以让更多的客户端开发人员、软件公司不要去自己发明什么服务器端,而是在自己的平台上开发流行的应用。并且自己的通过服务来保证业务逻辑上的一致、高效和安全。而不是提供一个任何人都可以随便浏览和修改数据记录的数据库作为api!1、请问除了wcf,我还可以使用什么方式,自己实现socket吗?2、业务逻辑层&我目前是已实现,但是之前一直都是在局域网,这次要放在互联网上用。所以我的业务逻辑层在客户端了。3、分层借口,但是实际上很多项目,没有时间去做这个,很短的周期,又要看到效果。也许这是也垃圾项目越来越多的原因。又经过半天的测试,现在的项目,也可以支持使用传递sql正常运行,放在云主机上。wcf无疑是最简单的实现远程调用和中间件的方式。
本站所有文章全部来源于互联网,版权归属于原作者。本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(),我们收到后立即调整或删除。
就是winform里面,如何把两个控件用ID号暗含的方式和成一个控件
本人想学习【ant.design】组件(http://ant.design/),但看了官网的上手教程,也不明白怎样入手开发。如果朋友用过这个组件,能否提供一个最简单的项目(显示一个按扭或下接框组件)参考?万分感谢。邮箱:michael_
Colorbackcolor=Color.Bprivatevoidscrollbar_valueChange(objectsender,EventArgse){inta1=hScrollBar1.Vinta2=hScrollBar2.Vinta3=hScrollBar3.Vbackcolor=Color.FromArgb(a1,a2,a3);label2.T...
我有一个tabpage,上面显示的一篇文章。这篇文章有这些字段:文章标题,作者,发表日期,摘要,关键字,文章内容等。这些字段都是显示在TextBox上面。TextBox是通过代码来添加上去的。我现在想在这个tabpage页面上,添加一个按钮“下载”实现下载功能,用户点击“下载”的时候,就会读取这个tabpage页面上文章,并以pdf(或者text、doc)格式下载到自己的电脑上面去。我是初学者,不...
我使用WrapPanel纵向排列图片,碰到了这样的问题请问怎么办啊。图片是用for循环逐渐加进去的。Imageimage=newImage(){Height=150,Source=newBitmapImage(newUri(fileList[i],UriKind.Absolute)),Margin=newThickness(0,0,15,15),};image.MouseUp+=image_Mou...
如题,比如3D岛/#
如:ClassA{Id,Name,Meno}ClassB{Id,Name}Aa=newA();Bb=newB();//如何自动实现把A和B的共同属性赋值给B,实现效果b.Id=A.Id;b.Name=A.N假设实际应用场景中A,B类中都有很多属性,部分是相同的。
平台版本信息Windows:5.1.(Win32NT)CommonLanguageRuntime:2.0.50727.42System.Deployment.dll:2.0.50727.42(RTM.0)mscorwks.dll:2.0.50727.42(RTM.0)dfdll.dll:2.0.50727.42(RTM....
我在用PictureBox在窗口贴了一个和工作区一样大的图(可以看成是背景图)①可不可以在这个背景图PictureBox的基础上再动态的创建PictureBox,并且使这些新创建的PictureBox对于背景图的PictureBox是置顶的,也就是说我可以给这些新创建的PictureBox添加单击事件代码;②如果①方法不行,有没有什么有效的方法将动态创建的PictureBox全部置顶,我试了Bri...
&inputtype="radio"name="p_id"value="&%=RsA(0,i)%&"class="dxk"&%ifRsA(2,i)=1thenresponse.Write("checked='checked'")%&/&&imgsrc="images/name&%=i%&.jpg"width="210"height="51"al...版权所有,转载请注明出处:
枚举类型在WCF中默认是可以被序列化的,而不需要显式的使用DataContractAttribute来修饰。因此如下代码是可以正常运行的:
enum ContactType
[DataContract]
class Contact
[DataMember]
public ContactType ContactT
如果要在禁止某一个枚举值,就需要显示的使用DataContractAttribute来修饰了,并且需要EnumMemberAttribute来修饰枚举值,没有被EnumMemberAttriubute修饰的枚举值就表示不被包含在数据契约中。如要因此枚举ContactType的Partner枚举值的话,可以使用如下代码:
[DataContract]
enum ContactType
[EnumMember]
[EnumMember]
// will not be part of data contract.
enum ContactType
另外EnumMemberAttribute有一个Value属性,可以改变枚举名在数据契约中的名称,类似于DataContractAttribute, DataMemberAttribute和OperationContractAttribute的Name属性。使用方法如下代码:
[DataContract]
enum ContactType
[EnumMember(Value = "MyCustomer")]
[EnumMember]
[EnumMember]
那么数据契约就等同于:
enum ContactType
MyCustomer,
xiaoheliushuiya
浏览: 65168 次
privacyManager
为何这个一直为null呢
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'public enum MicrosoftTechnology
ASPNETMVC,
SQLServer,
SilverLight,
此枚举默认值为int型,当然我们可以根据需要指定枚举的数据类型。比如 public enum MicrosoftTechnology: long{....} 等。MicrosoftTechnology枚举int值分别为
& Csharp:0;ASPNETMVC:1;SQLServer:2;WCF:3;SilverLight:4, 以自增1的形式自动赋值。当然也可以指定每个枚举项的值。
&&& 2、枚举的位运算:
& & & & & Flag特性表示枚举支持位运算。一般情况下我们用到的位运算符有:&(与)、|(或)、~(非)。
&&&&&&&&& 首先我们为枚举加上[Flags]特性后再指定枚举值。
&&&&&&&&& 将1、中的代码修改如下:&&&&&&
public enum MicrosoftTechnology
CSharp = 1,
ASPNETMVC = 2,
SQLServer = 4,
SilverLight = 16,
&&&&& 这里指定枚举值主要是为了使用与、或、非这三个位运算符。将枚举值转化成二进制值:
&&&&& CSharp: 1 = 0001
&&&&& ASPNETMVC: 2 = 0010
&&&&& SQLServer: 4 = 0100
&&&&& WCF: 8 = 1000
&&&&& SilverLight: 16 = 10000
&&&& 举例说明:
&&&&&&&&& 如果某位开发者选择两项微软技术分别为CSharp和ASPNETMVC 用位运算表达为 0001 | 0010 = 0011。经过不懈的努力这位开发者掌握了以上两项技术&0011&。现在我们想通过位运算检测出这位开发者是否精通CSharp:代码为:
(MicrosoftTechnology.CSharp|MicrosoftTechnology.ASPNETMVC) & MicrosoftTechnology.CSharp 等同 (0001 | 0010 = 0011)& 0001 等于 0001(CSharp :1) 讲到这里我想您应该不难理解:为了对枚举运用位操作时指定枚举值的缘故了。非(~)操作符这里就留给读者自己实践了。
&&&& 二、为枚举进行本地化
&&&&& 通过.net泛型机制编写枚举本地化通用方法,代码如下:
/// &summary& 2
/// 本地化枚举通用方法 3
/// &/summary& 4
/// &returns&&/returns& 5
/// &author&Ryanding&/author& 6 &
private static string LocalizeEnumeration(object enumerator) 7
ResourceManager resources = new ResourceManager("resx文件名",10
System.Reflection.Assembly.GetExecutingAssembly());11 12
string name = String.Format("{0}.{1}.Text", enumerator.GetType().Name, enumerator);13
string localizedDescription = resources.GetString(name);14 15
if (localizedDescription == null)16
return enumerator.ToString();17
return localizedD19
/// &summary&22
/// 翻译枚举成中文23
/// &/summary&24 &
public static List&KeyValuePair& GetEnumStringList&T&()25
string[] resultPrepare = Enum.GetNames(typeof(T));27 28
List&KeyValuePair& result = new List&KeyValuePair&();29
Array.ForEach(resultPrepare, f =& result.Add(new KeyValuePair30
Key = (int)(Enum.Parse(typeof(T), f)),32
Value = LocalizeEnumeration(Enum.Parse(typeof(T), f))33
通过以上代码,可以认为枚举也是一种类型。这里通过泛型机制将枚举本地化统一处理。
&&& 三、枚举在ORM中提高程序可读性
&&&& 以LinqToSQL来列举枚举在ORM中的作用:
&&&& 在大中型系统中设计数据库表时,比如有一张Customer表,存在一字段CustomerType(int 型) 。
&&&& CustomerType 枚举定义如下:
public enum CustomerType
Trader = 0,
Supplier = 1,
Logistics = 2,
Customer表结构如下:
LinqTosql debug如下:
可以看出LinqTosql 已经很&完美&的将LINQ语句解析成SQL语句。这样当我们的业务变得相对复杂,枚举状态数量也逐渐增加时,开发者无需硬记0,1,2,3这些到底代表数据的何种业务状态。通过枚举映射到ORM,我们的代码可读性进一步加强。当然更便于维护了!
&&&& 最后希望本篇文章可以给您带来帮助,如有不足之处欢迎指出,谢谢!
MicrosoftTechnology

我要回帖

更多关于 枚举值是否可用 的文章

 

随机推荐