C# 通过url调用Web服务

C# 通过url调用Web服务,c#,web-services,wcf,C#,Web Services,Wcf,所以,我制作了这个WebServiceWell WCF服务,我猜它输入一些参数并返回一个json对象。这很有效 但是现在我想对客户端进行一些更改 目前我只有一个按钮,一些用于输入的文本框和一个文本区 按钮如下所示: ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client(); protected void Button11_Click(object sender, EventArgs e) {

所以,我制作了这个WebServiceWell WCF服务,我猜它输入一些参数并返回一个json对象。这很有效

但是现在我想对客户端进行一些更改

目前我只有一个按钮,一些用于输入的文本框和一个文本区

按钮如下所示:

ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();
protected void Button11_Click(object sender, EventArgs e)
{
    int? i;
    if (tbSagsNr.Text != "")
    {
        i = Convert.ToInt32(tbPOSTUdlSag.Text);
    }
    else
    {
        i = null;
    }
    string s = tbFacilitet.Text;
    string a1 = tbAdresse1.Text;
    string a2 = tbAdresse2.Text;
    string p = tbPostNr.Text;

    string json = sc.HouseSearch(i, s, a1, a2, p);

    TextArea1.InnerText = json;
}
    <?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" targetFramework="4.6.1"/>
    <pages validateRequest="false" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="WCFTest3_Behavior" name="WCFTest3.Service1">
        <endpoint
            address =""
            binding="webHttpBinding"
            bindingConfiguration="webHttpEndpointBinding"
            name="WCFTest3.Service1"
            contract="WCFTest3.IService1"
            behaviorConfiguration="web"/>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFTest3_Behavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="false" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpEndpointBinding">
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="http" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <connectionStrings>
    <add
      name="UnikBoligCon"
      connectionString="server=??;database=??;user=??;password=??"
      providerName="System.Data.SqlClient"
  />
  </connectionStrings>
</configuration>
如果我想通过url调用web服务,我该怎么办?我认为它应该是这样的,这取决于我使用的参数:

http://localhost:58637/Default.aspx/Service1.svc/HouseSearch?vSagsNr=5
它不需要文本框和所有的东西,而应该直接在屏幕上打印json字符串

我对制作网络服务还很陌生,我觉得到目前为止我一直在摸索自己的路

IService1:

    [OperationContract()]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "HouseSearch")]
    string HouseSearch(int? vSagsNr, string vFacilitet, string vAdresse1, string vAdresse2, string vPostNr);
编辑:实际上它应该看起来更像这样:

http://localhost:58637/WCFTest3/Service1.svc/HouseSearch?vSagsnr=5
编辑:我的网络配置现在如下所示:

ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();
protected void Button11_Click(object sender, EventArgs e)
{
    int? i;
    if (tbSagsNr.Text != "")
    {
        i = Convert.ToInt32(tbPOSTUdlSag.Text);
    }
    else
    {
        i = null;
    }
    string s = tbFacilitet.Text;
    string a1 = tbAdresse1.Text;
    string a2 = tbAdresse2.Text;
    string p = tbPostNr.Text;

    string json = sc.HouseSearch(i, s, a1, a2, p);

    TextArea1.InnerText = json;
}
    <?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" targetFramework="4.6.1"/>
    <pages validateRequest="false" />
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="WCFTest3_Behavior" name="WCFTest3.Service1">
        <endpoint
            address =""
            binding="webHttpBinding"
            bindingConfiguration="webHttpEndpointBinding"
            name="WCFTest3.Service1"
            contract="WCFTest3.IService1"
            behaviorConfiguration="web"/>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WCFTest3_Behavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="false" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpEndpointBinding">
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add binding="webHttpBinding" scheme="http" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <connectionStrings>
    <add
      name="UnikBoligCon"
      connectionString="server=??;database=??;user=??;password=??"
      providerName="System.Data.SqlClient"
  />
  </connectionStrings>
</configuration>
编辑:哦,等等,我想我需要填写地址,网络配置中的服务现在看起来是这样的

<services>
      <service behaviorConfiguration="WCFTest3_Behavior" name="WCFTest3.Service1">
        <endpoint
            address ="http://localhost:58532/Service1.svc"
            binding="webHttpBinding"
            bindingConfiguration="webHttpEndpointBinding"
            name="WCFTest3.Service1"
            contract="WCFTest3.IService1"
            behaviorConfiguration="web"/>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange"/>
      </service>
    </services>

我做了和你描述的差不多的事情。一种WCF服务,可通过将web.config更改为服务Http、NetTCP或REST来切换。让Http和NetTCP配置并排很容易,但我无法想出如何将REST配置与其他两个结合起来,所以我将它们分开,我的需求不需要REST api,我只想这样做

我的经营合同是:

[OperationContract]
[
 WebInvoke(Method = "GET",
           BodyStyle = WebMessageBodyStyle.Wrapped,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "TestMethod/{applicationCode}/?ignoreStatus={ignoreStatus}&logonName={logonName}&userProfileId={userProfileId}")
]
String TestMethod(String applicationCode, Boolean ignoreStatus = false, String logonName = "", String userProfileId = "");
可以通过使用Internet浏览器测试的Url调用

http://localhost/JayVServerV2/DataAccess/DataAccess.svc/TestMethod/Tom?ignoreStatus=true&logonName=JayV&userProfileId
解决方案最重要的部分是正确地设置Web.Config。所以,我已经包括了我的整个Web.Config,让你看看我是如何做到的

<?xml version="1.0"?>
<configuration>
<system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5"/>
    <authentication mode="Windows"/>
    <authorization>
        <allow users="*"/>
    </authorization>
    <identity impersonate="false"/>
</system.web>
<system.serviceModel>
    <services>
        <service behaviorConfiguration="JayVServer_Behavior" name="JayVServerV2.DataAccess.DataAccess">
            <endpoint
                address =""
                binding="webHttpBinding"
                bindingConfiguration="webHttpEndpointBinding"
                name="RestJayVServerV2.DataAccess.DataAccess"
                contract="DataServerV2.DAtaAccess.IDataAccess"
                behaviorConfiguration="web"/>
            <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="JayVServer_Behavior">
                <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="web">
                <webHttp />
            </behavior>
        </endpointBehaviors>
    </behaviors>
    <bindings>
        <webHttpBinding>
            <binding name="webHttpEndpointBinding">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" />
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <protocolMapping>
        <add binding="webHttpBinding" scheme="http" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
</system.webServer>
</configuration>

请看System.Net.WebClient和DownloadString方法。我想这应该可以满足您的需要。@DerKejser对于最新的错误-匿名和安全模式,我认为您需要禁用匿名访问并启用Windows身份验证,所有这些都是通过IIS和身份验证部分完成的。谢谢您的回复,我用另一个问题更新了我的帖子。