每当我尝试使用SOAP或REST运行客户端应用程序时,我都会遇到问题。无论如何,我似乎在localhost上被拒绝了。我验证了我有两个服务的正确端口,所以我想在这里发布一些信息。使用我的SOAP服务时得到的错误如下:
由于内部错误,服务器无法处理请求。有关错误的更多信息,请在服务器上启用IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自< serviceDebug>配置行为),以便将异常信息发送回客户端,或者根据Microsoft .NET打开跟踪
我打开了跟踪,我的REST获得了以下内容
无法建立连接,因为目标计算机主动拒绝了它127.0.0.1:62928
Web服务定义为
public string InsertPatientIDS(PATIENT_IDS patientInfo)
{
string message;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "\\SQLExpress";
builder.InitialCatalog = "pchr42563";
builder.IntegratedSecurity = true;
SqlConnection con = new SqlConnection(builder.ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("INSERT into PATIENT_IDS(PATIENT_ID,LAST_NAME,FIRST_NAME, DATE_OF_BIRTH,ADDRESS_STREET, ADDRESS_STATE, ADDRESS_CITY,ADDRESS_ZIP,PHONE_HOME,PHONE_MOBILE,PRIMARY_ID) values" +
"(@PATIENT_ID,@LAST_NAME,@FIRST_NAME,@DATE_OF_BIRTH,@ADDRESS_STREET, @ADDRESS_STATE, @ADDRESS_CITY,@ADDRESS_ZIP,@PHONE_HOME,@PHONE_MOBILE,@PRIMARY_ID)",con);
cmd.Parameters.AddWithValue("@PATIENT_ID", patientInfo.PATIENT_ID);
cmd.Parameters.AddWithValue("@LAST_NAME", patientInfo.LAST_NAME);
cmd.Parameters.AddWithValue("@FIRST_NAME", patientInfo.FIRST_NAME);
cmd.Parameters.AddWithValue("@DATE_OF_BIRTH", patientInfo.DATE_Of_BIRTH);
cmd.Parameters.AddWithValue("@ADDRESS_STREET", patientInfo.ADDRESS_STREET);
cmd.Parameters.AddWithValue("@ADDRESS_STATE", patientInfo.ADDRESS_STATE);
cmd.Parameters.AddWithValue("@ADDRESS_CITY", patientInfo.ADDRESS_CITY);
cmd.Parameters.AddWithValue("@ADDRESS_ZIP", patientInfo.ADDRESS_ZIP);
cmd.Parameters.AddWithValue("@PHONE_HOME", patientInfo.PHONE_HOME);
cmd.Parameters.AddWithValue("@PHONE_MOBILE", patientInfo.PHONE_MOBILE);
cmd.Parameters.AddWithValue("@PRIMARY_ID", patientInfo.PRIMARY_ID);
int result = cmd.ExecuteNonQuery();
if (result == 1)
{
message = patientInfo.PRIMARY_ID + " inserted successfully";
}
else
{
message = patientInfo.PRIMARY_ID + " not inserted successfully";
}
con.Close();
return message;
并在客户端应用程序中使用
ServiceClient client = new ServiceClient();
PCHRSoapReference1.PATIENT_IDS patientInfo = new PCHRSoapReference1.PATIENT_IDS();
patientInfo.FIRST_NAME = txtFirst.Text;
patientInfo.LAST_NAME = txtLast.Text;
patientInfo.ADDRESS_STREET = txtAddress.Text;
patientInfo.ADDRESS_CITY = txtCity.Text;
patientInfo.ADDRESS_STATE = txtState.Text;
patientInfo.ADDRESS_ZIP = txtZip.Text;
patientInfo.PHONE_HOME = txtOffice.Text;
patientInfo.PHONE_MOBILE = txtMobile.Text;
patientInfo.PRIMARY_ID = txtPrimaryID.Text;
patientInfo.DATE_Of_BIRTH = dtpDate.Value;
//give a successful or unsuccessful result
string result = client.InsertPatientIDS(patientInfo);
MessageBox.Show(result);
app.config也以
的形式给出<client>
<endpoint address="http://localhost:62928/Service.svc" behaviorConfiguration="WebBehavior"
binding="webHttpBinding" contract="PCHRContracts.IPatientIDS" />
<endpoint address="http://localhost:59647/Service.svc" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService" contract="PCHRSoapReference1.IService"
name="WSHttpBinding_IService">
<identity>
<userPrincipalName value="thebigreddudePC\thebigreddude" />
</identity>
</endpoint>
</client>
为了使这个更具可读性,我只发布了我的SOAP服务而不是REST的代码,因为我认为错误与更深层次的内容有关。
如果有任何明确的语法问题,我会很感激。如果它很可能是本地补偿问题,那么请告诉我。它过去曾遇到过远程连接问题,但这是我第一次使用localhost。另外,我没有使用IIS,只使用内置的VS.
答案 0 :(得分:1)
最有可能的是,此错误表示可能存在阻止您的呼叫的防火墙。 因此,请务必关闭计算机上的防火墙或任何反恶意软件。 一篇类似的帖子进一步讨论了...... No connection could be made because the target machine actively refused it?
答案 1 :(得分:0)
根据评论讨论,您似乎没有在指定的端点http://localhost:62928/Service.svc
上运行服务。
我认为服务是您编写的并拥有源代码的东西。将其加载到VS中并运行它。您可能需要设置项目的属性以确保它始终使用端口62928
运行,而不是选择第一个可用。或者,您可以将IIS配置为指向项目并将该应用程序绑定到上述端口。
一旦这样做,您就可以通过在命令提示符telnet localhost 62928
中执行来快速测试某些内容正在侦听。如果连接被接受,那么至少在那里听。如果没有,您将收到错误消息,可能与您发布的消息类似。
VS内置的是用于托管Web应用程序(和服务)的迷你Web服务器,但您需要实际运行项目才能运行(或者再次使用IIS来托管,此时它将独立于VS)。