我们有一个最初使用.NET 4.0和WIF 3.5(1.0?)构建的应用程序.我正在将其转换为使用WIF 4.5,因为我们已将应用程序升级到.NET 4.5.我已经完成了所有代码更改,并且一直在与配置设置进行斗争.我目前的困境是使用<claimTypeRequired>元素.根据这个文档,它应该是<identityConfiguration>的孩子,但是当我修改我的配置看起来像这样
<system.identityModel>
<identityConfiguration>
<claimTypeRequired>
...
</claimTypeRequired>
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到以下错误
Parser Error Message: Unrecognized element 'claimTypeRequired'.
Run Code Online (Sandbox Code Playgroud)
如果我只是注释掉<claimTypeRequired>块,我就会遇到这个错误,但后来又遇到了另一个问题.我们通过以下配置修改了现有应用程序中的maximumClockSkew
<securityTokenHandlerConfiguration>
<maximumClockSkew value="1" />
</securityTokenHandlerConfiguration>
Run Code Online (Sandbox Code Playgroud)
前面引用的配置文档甚至没有提到maximumClockSkew.我想我会试着把它留进去看看会发生什么.会发生什么
Parser Error Message: Property 'maximumClockSkew' is not a ConfigurationElement.
Run Code Online (Sandbox Code Playgroud)
但是当我使用JustDecompile查看SecurityTokenHandlerConfigurationElement类时,我可以看到该属性:
[ConfigurationProperty("maximumClockSkew", IsRequired=false, DefaultValue="00:05:00")]
[IdentityModelTimeSpanValidator(MinValueString="00:00:00")]
[TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
public TimeSpan MaximumClockSkew...
Run Code Online (Sandbox Code Playgroud)
所以它似乎期待它在那里.
这几乎就像微软实际上并不希望我们使用这些东西.
我的DataBase中有两个表BUNTS,其中包含有关钢件的信息
CREATE TABLE BUNTS (
BUNTCODE INTEGER NOT NULL,
BUNTNAME VARCHAR(20),
BUNTSTEEL INTEGER,
......
);
Run Code Online (Sandbox Code Playgroud)
并且POLL_WEIGHT_BUNTS,其中包含有关每个bunt上执行的操作的信息
CREATE TABLE POLL_WEIGHT_BUNTS (
PWBCODE INTEGER NOT NULL,
PWBBUNTCODE INTEGER,
PWBDEPARTMENTFROM INTEGER,
PWBDEPARTMENTTO INTEGER
....
);
Run Code Online (Sandbox Code Playgroud)
这种关系是一对多的.我将这些表映射到模型.一切都很好.最近我决定在表BUNTS中添加一个字段,该字段将引用在bunt上执行的最后一个操作:
BUNTLASTOPER INTEGER
Run Code Online (Sandbox Code Playgroud)
现在我的模型看起来像这样:
[Table("BUNTS")]
public class Bunt
{
[Key]
[Column("BUNTCODE")]
public int? Code { set; get; }
[Column("BUNTNAME")]
public string Name { set; get; }
[Column("BUNTSTEEL")]
public int? SteelCode { set; get; }
[Column("BUNTLASTOPER")]
public int? LastOperationID { set; get; }
[ForeignKey("LastOperationID")]
public …Run Code Online (Sandbox Code Playgroud) string json = "{\"People\":[{\"FirstName\":\"Hans\",\"LastName\":\"Olo\"}
{\"FirstName\":\"Jimmy\",\"LastName\":\"Crackedcorn\"}]}";
var obj = JObject.Parse(json);
List<string> first;
List<string> last;
foreach (var child in obj["People"].Children())
{
var name = child.First()["countryName"].ToString();
var two = child.First()["countryCode"].ToString();
var three = child.First()["isoAlpha3"].ToString();
countries.Add(name);
twoCharCodes.Add(two);
threeCharCodes.Add(three);
Console.Write("Name:\t\t{0}\n2CharCode:\t{1}\n3CharCode:\t{2}\n\n", name, two, three);
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法将每个FirstName值添加到第一个List中,并与LastName值和最后一个List相同.这样做的最佳方法是什么?
上面的代码打破了:
var name = child.First()["countryName"].ToString();
Run Code Online (Sandbox Code Playgroud)
有这个错误:
Cannot access child value on Newtonsoft.Json.Linq.JProperty
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我的Index.cshtml
@model ReportGenerator.WebUI.Models.ReportViewModel
@Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" })
Run Code Online (Sandbox Code Playgroud)
我的控制器
public ActionResult Index(ReportViewModel model)
{
...some stuff
model.report = new Report();
model.report.FileName = "INDEX";
return View(model);
}
public ActionResult fillFields(ReportViewModel _model)
{
...some stuff
_model.report = new Report();
_model.report.FileName = "FILL";
return View("Index", _model);
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,该TextBox Text属性设置为"INDEX".此外,当我点击一个调用fillFields控制器动作的按钮时,TextBox仍然显示"INDEX",它不会变为"FILL".
我究竟做错了什么?为什么不想工作?
public class ContactsController : ApiController
{
private static readonly List<Contact> _contacts = new List<Contact>();
public Contact PutContacts(int id, Contact contact)
{
if (_contacts.Any(c => c.Id == contact.Id) == false)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
contact.LastModified = DateTime.Now;
return contact;
}
}
Run Code Online (Sandbox Code Playgroud)
http put header:
PUT /api/contacts/3 HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:8080
Run Code Online (Sandbox Code Playgroud)
身体:
{"Id":3,"Name":"mmm","Phone":"000 000 0000","Email":"mmm@gmail.com","LastModified":"2012-03-08T23:42:13.8681395+08:00"}
Run Code Online (Sandbox Code Playgroud)
响应:
HTTP/1.1 400 Bad Request
"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'SelfHost.Contact PutContacts(Int32, …Run Code Online (Sandbox Code Playgroud) 我从excel文件中获取了ID和金额列表(数千个id和相应的金额).然后我需要检查数据库以查看每个ID是否存在以及是否检查以确保DB中的金额大于或等于excel文件中的金额.
问题是运行此select语句超过6000次并返回我需要的值需要很长时间.即使在1/2秒的时间内,所有选择也需要大约一个小时.(我通常最多不会得到超过5个结果)
有更快的方法吗?
是否有可能以某种方式同时传递所有ID,只需拨打1个电话并获得大量收藏?
我尝试过使用SqlDataReaders和SqlDataAdapters,但它们看起来差不多(两种方式都太长)
以下是如何工作的一般概念
for (int i = 0; i < ID.Count; i++)
{
SqlCommand cmd = new SqlCommand("select Amount, Client, Pallet from table where ID = @ID and Amount > 0;", sqlCon);
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID[i];
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dataTable);
da.Dispose();
}
Run Code Online (Sandbox Code Playgroud) 我已经看到从Web API以两种不同的方式发送响应.
return ResponseMessage(new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType));
Run Code Online (Sandbox Code Playgroud)
要么
return StatusCode(HttpStatusCode.UnsupportedMediaType);
Run Code Online (Sandbox Code Playgroud)
两人最终都会向调用者发回415.我已经查看了两个结果类的MSDN文档,但仍然无法弄清楚有什么不同或为什么我会选择一个而不是另一个.
我正在尝试创建包含Castle.Core的FakeItEasy的合并版本.我读到了有关ILMerge的信息,看起来这是我需要的解决方案.下载并构建FakeItEasy后,我将所需的所有文件(FakeItEasy.dll(.NET4),Castle.Core.dll(.NET4),ilmerge.exe,FakeItEasy.snk)复制到同一文件夹中.然后我运行以下命令:
ilmerge
/keyfile:FakeItEasy.snk
/out:..\FakeItEasy.dll
/t:library
/targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319
FakeItEasy.dll Castle.Core.dll
Run Code Online (Sandbox Code Playgroud)
得到以下结果:
An exception occurred during merging:
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(String wszFilePath, String wszKeyContainer, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtr ppbSignatureBlob, IntPtr pcbSignatureBlob)
at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)
at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module)
at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)
如果我放弃"/keyfile:FakeItEasy.snk",合并的程序集就会很好地创建,但这对我没有帮助,因为我需要一个签名版本.
我也尝试将目标平台指定为:
/targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Run Code Online (Sandbox Code Playgroud)
但结果是一样的.
我正在使用IEnumerable,在调试器中我想看到它有的项目,但我不能,因为没有任何属性也没有项目.
是否可以看到具有IEnumerable的项目?
我正在尝试在 Azure 服务总线触发函数中绑定到 MessageReceiver。我的目标是处理死信队列消息并完成它们。
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([ServiceBusTrigger("<topicName>", "<subscriptionName>/$DeadLetterQueue", Connection = "connectionstring")]Message message,
ILogger logger,
MessageReceiver messageReceiver)
{
// TODO: Perform some actions
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
}
Run Code Online (Sandbox Code Playgroud)
问题是它无法绑定到 Message 接收器类。
Microsoft.Azure.WebJobs.Host:索引方法“Function1”时出错。Microsoft.Azure.WebJobs.Host:无法将参数“接收器”绑定到类型 MessageReceiver。确保绑定支持参数类型。如果您使用绑定扩展(例如 Azure Storage、ServiceBus、Timers 等),请确保您已在启动代码(例如 builder.AddAzureStorage()、builder.AddServiceBus() 中调用了扩展的注册方法)、builder.AddTimers() 等)。
为什么我绑定失败的任何想法?
c# ×7
.net ×2
.net-core ×1
asp.net-mvc ×1
azure ×1
debugging ×1
firebird ×1
ilmerge ×1
json ×1
list ×1
self-hosting ×1
sql ×1
sql-server ×1
wif ×1