我做了一个简单的项目,使用ksoap2调用wcf web服务.但是当它调用envelope.getResponse(); 它给错误说-----
"SoapFault - faultcode:'a:ActionNotSupported'faultstring:'由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action'GetString'的消息.这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配.检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无).faultactor:'null'detail:null"
我在localhost中运行web服务.
请帮帮我一些
我指定的这个值是否正确,
private static final String SOAP_ACTION = “GetString”;
private static final String OPERATION_NAME = “GetString”;
private static final String WSDL_TARGET_NAMESPACE = “http://tempuri.org/”;
private static final String SOAP_ADDRESS = “http://10.0.2.2:14089/Service1.svc?wsdl”;
Run Code Online (Sandbox Code Playgroud) 我一直在尝试几种不同的方法,以便获得一组简单的事务来处理简单的WCF客户端/服务器情况.我的WCF服务器具有用于数据库访问的Entity Framework类的类级别声明,以及用于修改数据的几种方法和用于SaveChanges的方法.我正在使用Oracle数据访问(ODP.NET).
例如,我想从客户端调用修改,然后单独调用以保存WCF服务中的更改.它不起作用.基本上,一切都运行良好,但是当第二次调用保存更改时,WCF服务不再具有原始上下文,因此不会保存任何更改(因此,之前的调用会自动回滚进行更改) .
我在我的客户端围绕两个操作使用Transaction范围,并在完成后执行Complete().我的WCF服务具有使用的OperationContract [TransactionFlow(TransactionFlowOption.Mandatory)]和那些方法实现使用[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)].最后,我的web配置配置了一个wsHttpBinding,其transactionFlow属性设置为True.
我没有运气.无论我尝试什么,当我尝试点击服务进行后续保存时,EF上下文已经更新.
如何[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]在类上使用属性?
我正在寻找一些限制访问我的对象的方法,即如果在服务方法中访问某个对象,并且如果用户有权访问服务方法但没有权限访问该对象,则应抛出异常
我不得不承认,EF 4.1 RC Codefirst,DataAnnotations和FluentAPI的功能对我来说仍然是压倒性的.有时我真的不知道我在做什么;-)请看下面的POCO:
public class Country
{
[Key]
public Guid ID { get; set; }
[Required]
public virtual Currency Currency { get; set; }
}
public class Currency
{
[Key]
public Guid ID { get; set; }
public virtual ICollection<Country> Countries { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
总体思路:每个国家都需要有货币.但是根本不需要将货币分配给一个国家.
如果让EF创建相应的数据库,则按照约定将关系设置为CASCADE DELETE.换句话说:如果删除货币,也会删除相应的国家/地区.但就我而言,这不是我想要的.
我在FluentAPI中想出了一些代码来禁用CASCADE DELETE:
modelBuilder.Entity<Country>()
.HasRequired(cou => cou.Currency)
.WithOptional()
.WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)
我认为这意味着:每个国家都需要一种货币.此货币可能有零个,一个或多个国家/地区(可选).每当我删除一种货币时,相应的国家(如果有的话)都不会被级联删除.
令人惊讶的是,如果删除相应的货币,给定的方法仍会级联删除国家/地区.任何人都可以告诉我我想念的是什么吗?
fluent-interface cascading-deletes ef-code-first entity-framework-4.1
我的数据库中有很多关系.两个结束表是BlogPost和Item,中间的表是ItemBlogPost.我需要找回与特定项目相关的所有BlogPost.在SQL中,我会这样做:
SELECT BlogPost.*
FROM BlogPost
JOIN ItemBlogPost ON BlogPost.ID = ItemBlogPost.BlogPost_ID
WHERE ItemBlogPost.Item_ID = @Item_ID
Run Code Online (Sandbox Code Playgroud)
在C#中我有类似的东西:
IQueryable<BlogPost> itemBlogPosts = from b in connection.BlogPosts
where b.Items == item.ID
orderby b.Content.CreateDate descending
select b;
Run Code Online (Sandbox Code Playgroud)
但是,标记为b.Items的行没有给出Item属性的列表,并且没有b.ItemBlogPost来查看中间表.我也尝试过,b.Items.Contains(item)但也失败了.如何在LINQ to EF4中完成这项工作?
我查了这里和互联网没有答案.我如何让它工作?我正在使用discountasp.net SQL,所以它是否是一个让它工作的设置?
在Entity Framework 4.1中创建POCO时,是否应该对类进行编码以初始化Many关系,或者是否有某些理由允许Entity Framework控制这些属性?
public class Portfolio
{
private ICollection<Visit> _visits;
public virtual ICollection<Visit> Visits
{
get
{
if (_visits == null)
{
_visits = new List<Visit>();
}
return _visits;
}
set
{
_visits = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Portfolio
{
public virtual ICollection<Visit> Visits
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
还有更好的模式吗?
我有一个Reason对象:
public class Reason
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual Company Company {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我使用实体框架4,公司是公司的导航属性.
我还使用webservices将数据返回给客户端.
我有web方法返回原因:
[WebMethod]
public Reason[] GetCallReasons()
{
IReasonRepository rep =
ObjectFactory.GetInstance<IReasonRepository>();
return rep.GetReasonsList().ToArray();
}
Run Code Online (Sandbox Code Playgroud)
由于ef4,我在执行web方法时遇到以下异常:
A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Reason_24A0E4BBE02EE6BC2CF30BB56CFCB670C7D9D96D03D40AF4D174B89C9D3C5537'
Run Code Online (Sandbox Code Playgroud)
问题是因为ef4添加了无法序列化的属性:

为了解决这个问题并消除错误,我可以通过不使虚拟或删除导航属性来禁用导航属性.但我知道它并想要使用延迟加载功能.
我也可以为Reason编写特定的序列化器,但是我在我的web服务中使用了许多类,并为所有这些编写序列化器是很多工作.
我怎样才能解决这个异常?
我有像这样的课程,学生和老师
public class Course
{
[Key, DatabaseGenerated(DatabaseGenerationOption.Identity)]
public Guid CourseId { set; get; }
public ICollection<Student> Students { set; get; }
public Teacher Teacher { get; set; }
}
public class Student
{
[Key, DatabaseGenerated(DatabaseGenerationOption.Identity)]
public Guid StudentId { set; get; }
public ICollection<Course> Courses { set; get; }
}
public class Teacher
{
[Key, DatabaseGenerated(DatabaseGenerationOption.Identity)]
public Guid TeacherId { get; set; }
public ICollection<Course> Courses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图按主键获取课程如下
Course c = _unitOfWork.DbContext.Set<Course>().Find(keyValue);
Run Code Online (Sandbox Code Playgroud)
我从数据库中获取课程对象,但课程的学生和教师属性为空
我错过了什么?谢谢
我们假设我有以下代码:
TEModule teModule = Context.TEModules.Where(module => module.EnumValue.Equals(text.ModuleName)).FirstOrDefault();
if (teModule == null)
{
teModule = new TEModule();
teModule.EnumValue = text.ModuleName;
Context.TEModules.AddObject(teModule);
//Context.SaveChanges();
TEModule aux = Context.TEModules.Where(module => module.EnumValue.Equals(teModule.ModuleName)).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我保持" SaveChanges "注释,那么在下一个查询中,aux对象始终为null,因为Context.TEModules为空,即使我调用" AddObject "方法也是如此.但是,如果我在AddObject之后调用SaveChanges,那么在下一个查询中,aux对象不为null.问题是我不想经常调用SaveChanges,因为这不是我添加对象的唯一代码片段,如果我这样做,性能会下降.
所以问题是:我是否必须在每次AddObject调用后调用SaveChanges,如果以后我需要知道对象是否已经存在?
c# ×3
wcf ×3
.net ×1
add ×1
android ×1
code-first ×1
ksoap2 ×1
oracle ×1
savechanges ×1
sql ×1
transactions ×1
web-services ×1