存储过程不是从Web服务执行,而是在SSMS中执行

时间:2014-07-07 15:18:55

标签: c# sql web-services stored-procedures permissions

通过Web服务连接时,我与sql server management studio(SSMS)存在连接问题。

如果我在SSMS中使用帐户xxx登录,我可以执行存储过程。此用户xxx对存储过程的权限以及此存储过程使用的所有表是Alter,控制,执行,引用,取得所有权和视图定义。我认为我需要的就是执行。没问题,存储过程运行正常。

然后,在我的Web服务中,我将其设置为运行此存储过程。我使用javascript和SOAP运行它。它返回一个错误。我测试过它,毫无疑问,服务代码是正确的,以及javascript。我相信问题是权限,或sql中的一些配置。但是我无法弄清楚为什么通过一个有效的帐户连接到sql的sql并不允许我运行这个存储过程。

我是否缺少有关sql权限的内容,例如不使用SSMS时。或者,有什么方法可以测试我的Web服务的连接,这是在C#?

以下是一些代码,展示了我如何将其全部链接起来。

Web服务连接(C#):

<connectionStrings>
    <add name="TABLE_NAME" connectionString="Data Source=db_name\instance1;Connect Timeout=30;Initial Catalog=TABLE_NAME;User ID=xxx;PWD=****" />
</connectionStrings>

网络服务代码(C#):

[WebMethod]
public System.Data.DataSet FindThings(string params){
RegistrationDB RegDB = new RegistrationDB();
return RegDB.FindThings(connectionstring, DBHelper.Providers.SqlServer, params);
}

public DataSet FindThings(string connectString, DBHelper.Providers provider, string params){
  DBHelper db = new DBHelper();
  db.CreateDBObjects(connectString, provider);
  DataSet ds;
  try{
    db.AddParameter("@parameters", params);
    ds = db.GetDataSet("[dbo].[procedure_name]", CommandType.StoredProcedure, ConnectionState.Open);
    ds.Tables[0].TableName = "Things";
    ds.Tables[1].TableName = "YearParameters";
  }
  finally{
    db.connection.Close();
  }
  return ds;
}

使用Javascript:

var webServiceUrl = "/test.asmx";
var soapEnv = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
  <soapenv:Body> \
    <FindThings  xmlns='http://tempuri.org/'> \
      <params>" + varParams + "</params> \
    </FindThings> \
  </soapenv:Body> \
</soapenv:Envelope>";

$.ajax({
    url: webServiceUrl,
    type: "POST",
    dataType: "xml",
    data: soapEnv,
    complete: getResult,
    contentType: "text/xml; charset=\"utf-8\""
});

function getResult(result, status) {
  if(status != "success"){
    document.getElementById("results").innerHTML += "<p>Status: " + status + "</p>";
  }
}

这就是我在网页上获得输出&#34;状态:错误&#34;的地方。

任何人都知道我应该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您有权访问SQL Server,您还可以查看其中记录的事件或运行Profiler跟踪。可能是您认为用于连接到SQL Server的用户不在您的部署计算机上。通过try / catch获取调试信息是一个很好的解决方案,只是为您提供另一种选择。

答案 1 :(得分:0)

这可能是因为您的服务帐户已被删除。检查一下。我之前遇到过同样的问题。