我将简化代码以节省空间,但所呈现的内容确实说明了核心问题.
我有一个类,它有一个基类型的属性.有3个派生类可以分配给该属性.
如果我将任何派生类分配给容器并尝试序列化容器,则XmlSerializer会抛出可怕的:
"不期望类型x.使用XmlInclude或SoapInclude属性指定静态未知的类型."
但是我的基类已经用该属性修饰,所以我认为必须有一个额外的"隐藏"要求.
真正奇怪的是,默认的WCF序列化程序对此类层次结构没有任何问题.
Container类
[DataContract]
[XmlRoot(ElementName = "TRANSACTION", Namespace = Constants.Namespace)]
public class PaymentSummaryRequest : CommandRequest
{
[DataMember]
public PaymentSummary Summary { get; set; }
public PaymentSummaryRequest()
{
Mechanism = CommandMechanism.PaymentSummary;
}
}
Run Code Online (Sandbox Code Playgroud)
基类
[DataContract]
[XmlInclude(typeof(xPaymentSummary))]
[XmlInclude(typeof(yPaymentSummary))]
[XmlInclude(typeof(zPaymentSummary))]
[KnownType(typeof(xPaymentSummary))]
[KnownType(typeof(yPaymentSummary))]
[KnownType(typeof(zPaymentSummary))]
public abstract class PaymentSummary
{
}
Run Code Online (Sandbox Code Playgroud)
派生类之一
[DataContract]
public class xPaymentSummary : PaymentSummary
{
}
Run Code Online (Sandbox Code Playgroud)
序列化代码
var serializer = new XmlSerializer(typeof(PaymentSummaryRequest));
serializer.Serialize(Console.Out,new PaymentSummaryRequest{Summary = new xPaymentSummary{}});
Run Code Online (Sandbox Code Playgroud)
例外
System.InvalidOperationException:生成XML文档时出错.---> System.InvalidOperationException:不期望类型为xPaymentSummary.使用XmlInclude或SoapInclude属性指定静态未知的类型.在
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterPaymentSummaryRequest.Write13_PaymentSummary(String n,String ns,PaymentSummary o,Boolean isNullable,Boolean needType)at at …
所以我查看了我能找到的每个示例配置,但每当我尝试查看需要ssl的页面时,我最终都会进行重定向循环.我正在运行nginx/0.8.53和乘客3.0.2.
这是ssl配置
server {
listen 443 default ssl;
server_name <redacted>.com www.<redacted>.com;
root /home/app/<redacted>/public;
passenger_enabled on;
rails_env production;
ssl_certificate /home/app/ssl/<redacted>.com.pem;
ssl_certificate_key /home/app/ssl/<redacted>.key;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Url-Scheme $scheme;
proxy_redirect off;
proxy_max_temp_file_size 0;
location /blog {
rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
}
location ~* \.(js|css|jpg|jpeg|gif|png)$ {
if (-f $request_filename) {
expires max;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Run Code Online (Sandbox Code Playgroud)
这是非ssl配置
server {
listen 80; …Run Code Online (Sandbox Code Playgroud) 我有一个包含WebForms和MVC页面的大型企业应用程序.它具有我不想更改的现有身份验证和授权设置.
WebForms身份验证在web.config中配置:
<authentication mode="Forms">
<forms blah... blah... blah />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
到目前为止相当标准.我有一个REST服务,它是这个大型应用程序的一部分,我想使用HTTP身份验证代替这一项服务.
因此,当用户尝试从REST服务获取JSON数据时,它会返回HTTP 401状态和WWW-Authenticate标头.如果他们以正确形成的HTTP Authorization响应进行响应,则允许他们进入.
问题是,WebForms的覆盖这个处于较低的水平 - 如果返回401(未授权)它将覆盖与302(重定向到登录页面).这在浏览器中很好,但对REST服务没用.
我想关闭web.config中的身份验证设置,覆盖'rest'文件夹:
<location path="rest">
<system.web>
<authentication mode="None" />
<authorization><allow users="?" /></authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
该授权位工作正常,但认证线(<authentication mode="None" />)导致异常:
在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的.
我在应用程序级别配置它 - 它位于根web.config中 - 并且该错误适用于子目录中的web.configs.
如何覆盖身份验证,以便该站点的所有其余部分都使用WebForms身份验证,而这个目录不使用任何身份验证?
这类似于另一个问题:与ASP.NET MVC JSON请求401响应代码,但我不是在寻找相同的解决方案-我不想只是删除WebForms的认证和全球范围内添加新的自定义代码,还有远涉及很多风险和工作.我想只更改配置中的一个目录.
更新
我想设置一个Web应用程序,并希望所有WebForms页面和MVC视图都使用WebForms身份验证.我希望一个目录使用基本的HTTP身份验证.
请注意,我说的是身份验证,而不是授权.我希望REST调用带有HTTP头中的用户名和密码,我希望WebForm和MVC页面附带来自.Net的身份验证cookie - 在任何一种情况下,都会对我们的数据库进行授权.
我不想重写WebForms身份验证并滚动我自己的cookie - 这似乎是将HTTP授权的REST服务添加到应用程序的唯一方法,这似乎很荒谬.
我无法添加其他应用程序或虚拟目录 - 它必须作为一个应用程序.
可能重复:
删除匿名事件侦听器
我有以下跨浏览器功能来添加事件监听器:
_SU3.addEventListener = function(elem, eventName, fn) {
if(elem.addEventListener ) {
elem.addEventListener(eventName, fn, false);
} else if (elem.attachEvent) {
elem.attachEvent('on'+eventName, fn);
}
};
Run Code Online (Sandbox Code Playgroud)
我正在添加这样的监听器:
_SU3.addEventListener(_show, "click", function(event) {
_SU3.getChildren(_show, uri, element);
});
Run Code Online (Sandbox Code Playgroud)
这一切都很好.但是我想在调用一次后删除监听器.就像这样:
_SU3.getChildren = function(_show, url, element) {
... blah...
_SU3.removeEventListener(_show, 'click', ANON_FUNCTION);
};
Run Code Online (Sandbox Code Playgroud)
但当然,监听器功能是匿名的,因此没有可供参考的功能名称.
如何删除监听器?
谢谢
嗨,我在这里有一个示例CDATA
<![CDATA[asd[f]]]>
Run Code Online (Sandbox Code Playgroud)
和
<tag1><![CDATA[asd[f]]]></tag1><tag2><![CDATA[asd[f]]]></tag2>
Run Code Online (Sandbox Code Playgroud)
我有的CDATA正则表达式无法识别这一点
"<![CDATA["([^\]]|"]"[^\]]|"]]"[^>])*"]]>"
Run Code Online (Sandbox Code Playgroud)
这也行不通
"<![CDATA["[^\]]*[\]]{2,}([^\]>][^\]]*[\]]{2,})*">"
Run Code Online (Sandbox Code Playgroud)
有人请给我一个正则表达式<![CDATA[asd[f]]]>,我需要在Lex/Flex中使用它
:我已回答了这个问题,请对我的回答进行投票,谢谢.
我有一个元素:
...
<li class="products active"><a href="" title="Title">test</a></li>
...
Run Code Online (Sandbox Code Playgroud)
我想访问这个"li"标签并将"active"类交换为"past"类,所以最终的结果是:
...
<li class="products past"><a href="" title="Title">test</a></li>
...
Run Code Online (Sandbox Code Playgroud)
使用jQuery实现这一目标的最简单/有效方法是什么?
使用WinDbg和SOS,我有以下内容:
0:011> !threads
ThreadCount: 7
UnstartedThread: 0
BackgroundThread: 4
PendingThread: 0
DeadThread: 2
PreEmptive GC Alloc Lock
ID ThreadOBJ State GC Context Domain Count APT Exception
0 618 0015b350 20 Enabled 00000000:00000000 0017b720 0 Ukn
2 624 0016f508 b220 Enabled 00000000:00000000 0017b720 0 MTA (Finalizer)
9 e48 001c13d0 1220 Enabled 00000000:00000000 0017b720 0 Ukn
10 e8c 048c6a40 1800220 Enabled 00c296a8:00c2ab44 0017b720 0 MTA (Threadpool Worker) System.NullReferenceException
XXX 0 00224138 1820 Enabled 00000000:00000000 0017b720 0 MTA
XXX 0 001d5b50 1820 Enabled …Run Code Online (Sandbox Code Playgroud) 我有以下代码
Criteria criteria = this.getCriteriaForClass(DeviceListItem.class);
Projection rowCountProjection = Projections.countDistinct("color");
criteria.setProjection(rowCountProjection);
int rowCount = ((Long) criteria.uniqueResult()).intValue();
return rowCount;
Run Code Online (Sandbox Code Playgroud)
,其目的是找出名为"color"的字段具有不同值的行数.问题是
Projections.countDistinct("color");
Run Code Online (Sandbox Code Playgroud)
返回相同数量的结果
Projections.count("color");
Run Code Online (Sandbox Code Playgroud)
即使数据库视图中有多个具有相同颜色的行.将Criteria对象转换为SQL时,我发现Hibernate生成的SQL是
select count(this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1
Run Code Online (Sandbox Code Playgroud)
当我期待它的时候
select count(distinct this_.COLOR) as y0_ from DEVICESLIST_VIEW this_ where 1=1
Run Code Online (Sandbox Code Playgroud)
为什么它没有像预期的那样工作,是否有一些补救措施?不幸的是,在这种情况下我没有选择使用HQL.
我一直忙着为Red5创建一个应用程序.想象一下,当我尝试配置基本/摘要身份验证时,我感到惊讶,但事实并非如此.令我感到奇怪的是,我有一个正在运行的tomcat实例,可以使用以下xmls正确运行和验证:
web.xml(部分)
<security-constraint>
<web-resource-collection>
<web-resource-name>A Protected Page</web-resource-name>
<url-pattern>/stats.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>DIGEST</auth-method>
<realm-name>BLAAAAAAAAAAAAAAAAA</realm-name>
</login-config>
<security-role>
<description/>
<role-name>tomcat</role-name>
</security-role>
Run Code Online (Sandbox Code Playgroud)
和/ conf 中的tomcat-users.xml看起来有点像这样:
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
<role rolename="tomcat"/>
<user username="ide" password="bogus" roles="tomcat"/>
</tomcat-users>
Run Code Online (Sandbox Code Playgroud)
令人讨厌的是配置在tomcat的servlet容器上正确验证,但在red5的修改后的容器上,它只是不断要求验证.我变得疯了还是应该像魅力一样工作?
有什么指针吗?我错过了什么吗?
这是我尝试登录时收到的错误的堆栈跟踪:
Caused by: java.io.IOException: Unable to locate a login configuration
at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:250) [na:1.6.0_22]
at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91) [na:1.6.0_22]
... 27 common frames omitted
[ERROR] [http-127.0.0.1-5080-1] org.apache.catalina.realm.JAASRealm - Cannot find message associated with key jaasRealm.unexpectedError
java.lang.SecurityException: Unable to locate a …Run Code Online (Sandbox Code Playgroud) 我有一个对话框,当它产生时,它会被对象模型中的数据填充.此时,数据被复制并存储在"备份"对象模型中.当用户完成更改并单击"确定"以关闭对话框时,我需要一种快速方法来比较备份对象模型和实时模型 - 如果有任何更改,我可以为用户创建一个新的撤消状态.
如果可能的话,我不想为对象模型中的每个类编写比较函数.
如果我将两个对象模型序列化并且它们相同但存储在不同的内存位置它们是否相等?是否存在比较两个序列化对象模型的简单方法?